本篇内容主要讲解“Django基础知识学习及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Django基础知识学习及使用”吧!
socket服务端 与 浏览器的通信
负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn...
根据用户访问不同的路径执行不同的函数 c. 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言)
按上面三个功能划分:
框架自带a,b,c --> Tornado
框架自带b和c,使用第三方的a --> Django
框架自带b,使用第三方的a和c --> Flask
按另一个维度来划分:
Django --> 大而全(你做一个网站能用到的它都有)
其他 --> Flask 轻量级
pip3 install django==版本号(1.11.11/2.2.6)
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==版本号(1.11.11/2.2.6)
django-admin startproject project名称
File --> New project --> 左侧选Django --> 右侧填项目路径
manage.py:项目管理入口文件
settings.py:
1. 配置HTML文件存放的位置
Templates(存放HTML文件的配置) <-- 告诉Django去哪儿找我的HTML文件
2. 配置静态文件存放的位置
# 静态文件保存目录的别名
STATIC_URL = '/static/' # 所有静态文件(css/js/图片)都放在我下面你配置的文件夹中
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
3. 配置中文及时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
4. INSTALLED_APPS # 告诉Django有哪些APP
urls.py: 保存了路径和函数的对应关系
命令行启动
在项目的根目录下(也就是有manage.py的那个目录),运行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口启动
python3 manage.py runserver 端口 --> 在指定的端口启动
python3 manage.py runserver --> 默认在本机的8000端口启动
PyCharm启动
点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)
启动Django项目,等待用户连接
浏览器在地址栏输入URL,来连接我的Django项目
在urls.py中 找 路径和函数的 对应关系
执行对应的函数
返回响应
方便我们在一个大的Django项目中,管理实现不同的业务功能.
project --> 项目 (大学校)
APP --> 应用 (Linux学院/Python学院/大数据学院/Java学院)
命令行,在Django项目的根目录输入: python3 manage.py startapp app名字
不带参数的请求
path('admin/', admin.site.urls)
带参数的请求
path('solution/<int:变量名>/', views.ListSolution.as_view(), name="solutionList"),
专门用来定义处理请求的函数
from django.shortcuts import HttpResponse, render, redirect
HttpResponse("要返回的内容") --> 通常用于直接返回数据
render(request, "html文件", {"k1": v1}) --> 返回一个HTML文件或者打开文件进行字符串替换
redirect("URL") --> 告诉用户的浏览器去访问其他的URL
GET请求和POST请求
GET请求:
1. 浏览器请求一个页面
2. 搜索引擎检索关键字的时候
3. a标签
POST请求:
1. 浏览器向服务端提交数据,比如登录/注册等
2. 修改(新增)大段的数据
3. 上传文件
GET请求URL传值
127.0.0.1:8000/user/?变量名=变量值
获取request请求的方法
request.method == "GET"/"POST"
获取GET请求参数
request.GET.get(变量名, 默认值)
获取POST请求参数
request.POST.get(name的变量名, 默认值) # 获取单个值
request.POST.getlist(name的变量名) # 获取多选列表值
类 ---> 数据表 对象 ---> 数据行 属性 ---> 字段
操作数据表 --> 创建表/删除表/修改表(操作models.py里面的类)
操作数据行 --> 数据的增删改查
自己动手创建数据库:create database 数据库名;
在Django项目中设置连接数据库的相关配置(settings.py 告诉Django连接哪一个数据库)
# 数据库相关的配置
DATABASES = {
'default': { 'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
'HOST': '127.0.0.1', # 连接数据库的地址
'PORT': 3306, # 端口
'NAME': "day61", # 数据库名称
'USER': 'root', # 用户
'PASSWORD': '123456' # 密码
}
}
在app下面的models.py文件中定义一个类,这个类必须继承models.Model
class 类名(models.Model):
...
执行两个命令
python3 manage.py makemigrations # 新建Model或Model有改动时需要执行
python3 manage.py migrate # 把更改翻译成SQL语句,去数据库执行
# 出版社
class Publisher(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
name = models.CharField(max_length=64, null=False, unique=True)
查询
models.UserInfo.objects.all() # 查询所有
增加
models.UserInfo.objects.create(字段名=字段值)
删除
solution = Solution.objects.get(id=id) # 先获取对象
solution.delete() # 再删除
# 或
Solution.objects.get(id=id).delete()
修改
solution = Solution.objects.get(id=id) # 先获取对象
solution.字段名 = 字段值 # 修改某个字段的值
solution.save() # 保存修改
关系:
1. 一本书 只能 有一个出版社
2. 一本书 能有 多个作者
3. 一个作者 能写 多本书
出版社和书: 一对多 --> 外键
书和作者: 多对多 --> 用第三张表做关联
一对多关系操作
# 出版社
class Publisher(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
name = models.CharField(max_length=64, null=False, unique=True)
addr = models.CharField(max_length=128)
# 书
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
title = models.CharField(max_length=64, null=False, unique=True)
# 和出版社关联的外键字段
publisher = models.ForeignKey(to="Publisher")
# 增加
new_book_obj = models.Book.objects.create(
title="新书的名字",
# publisher=publusher_obj,
publisher_id=7
)
# 修改
book_obj = models.Book.objects.get(id=9)
book_obj.title=request.POST.get("book_title")
book_obj.publisher_id=9
book_obj.save()
多对多关系操作
# 作者表
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16, null=False, unique=True)
# 告诉ORM 我这张表和book表是多对多的关联关系,ORM自动帮我生成了第三张表
book = models.ManyToManyField(to="Book")
def __str__(self):
return "<Author Object: {}>".format(self.name)
# 增加
# 取到提交的数据
new_author_name = request.POST.get("author_name")
# post提交的数据是多个值的时候一定会要用getlist,如多选的checkbox和多选的select
books = request.POST.getlist("books")
# 创建作者
new_author_obj = models.Author.objects.create(name=new_author_name)
# 把新作者和书籍建立对应关系,自动提交
new_author_obj.book.set(books)
{{ 变量名 }}
{% for user in user_list %}
...
{% endfor %}
{{ forloop.counter }}
{{ forloop.last }}
{% if book_obj.publisher_id == publisher.id %}
{# 当前书籍关联的出版社才默认选中#}
<option selected value="{{ publisher.id }}">{{ publisher.name }}</option>
{% else %}
{# 其他的出版社不选中 #}
<option value="{{ publisher.id }}">{{ publisher.name }}</option>
{% endif %}
{# 如果当前这本书 在 当前作者关联的所有书 里面 #}
{% if book in author.book.all %}
<option selected value="{{ book.id }}">{{ book.title }}</option>
{% else %}
<option value="{{ book.id }}">{{ book.title }}</option>
{% endif %}
到此,相信大家对“Django基础知识学习及使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/zerobit/blog/3116759