Django介绍-day01:
请求数据格式
请求首行
请求头
\r\n
请求体
响应数据格式
响应首行
响应头
\r\n
响应体
服务器程序和应用程序
WSGI就是一种规范,定义了使用python编写web应用程序和web服务器之间的接口格式.
wsgiref模块
- 请求来的时候解析http格式的数据,封装成字典
- 响应走的时候给数据打包符合http格式,再返回给浏览器
动静态网页
静态网页:页面上的数据都是直接写死的
动态网页:数据是实时获取的
- 后端获取当前时间展示到html页面上
django
我们用的是django2.2.12
pip install django==2.2.12
# 命令行操作
- 创建django项目
先切换到对应的文件夹内
命令:django-admin startproject 项目名
- 启动django项目
先切换到项目目录下
命令:python manage.py runserver
- 创建应用
django是专门用来开发app的web框架
类似于大学里的各个学院
一个app就是一个独立的功能模块
命令:python manage.py startapp 应用名
# pycharm操作

主要文件介绍
-mysite项目文件夹
--mysite文件夹
---settings.py:配置文件
---urls.py:路由和视图函数对应视图(路由层)
---wsgi.py:wsgiref模块
--manage.py:django的入口文件
--app01文件夹
---migrations文件夹:数据库迁移记录
---admin.py:django后台管理
---apps.py:注册使用
---models.py:数据库相关
---tests.py:测试文件
---views.py:视图函数(视图层)
--templates文件夹:存放html文档
--db.sqlite3:django自带的sqlite3数据库
Django基本操作-day02:
命令行和pycharm创建项目的区别
- 命令行创建不会有templates文件夹,需要自己手动创建,pycharm可以自动创建
- pycharm创建的项目可以自动添加一个app,命令行创建的不可以,需要通过命令去添加
创建应用第一步先去配置文件中注册
配置介绍
BASE_DIR:项目根目录
DEBUG:用于配置django项目的启动模式,取值:True表示开发环境中使用,False表示运行在生产环境中(不启动调试)
ALLOWED_HOSTS:设置允许访问到本项目的host请求头的值.取值:
- []空列表表示只有host请求头为127.0.0.1或者localhost能访问
- [‘*’],表示任何请求头的host都能访问
- [‘192.168.1.2’, ‘127.0.0.1’]表示只有这两个可以访问
INSTALLED_APPS:注册的app(功能模块)
MIDDLEWARE:用于注册中间件
ROOT_URLCONF:用于配置根级url
TEMPLATES:html文件存放路径
DATABASES:项目指定的数据库
url格式
protocol://hostname[:port]/path[?query][#fragment]
protocol:协议
hostname:主机
port:端口.各种传输协议都有默认的端口号,如:http的默认端口是80
path:路径.由零个或多个/隔开的字符串,一般用来表示主机上的一个目录或者文件地址
query:可选,用于动态给网页传递参数,可以有多个参数,用&隔开
fragment:字符串,例如一个网页中有多个名词解释,可使用fragment直接定位到某一个名词解释
[]表示可以省略
django如何处理一个url对应的请求
- django从配置文件中根据ROOT_URLCONF找到主路由文件(默认情况下,该文件在项目同名目录下的urls)
- django加载主路由文件中的urlpatterns变量
- 依次匹配urlpatterns中的url,匹配到第一个合适的中断后续匹配
- 匹配成功-->调用对应视图函数处理请求,返回响应
- 匹配失败-->返回404响应
django必会
HttpResponse
返回字符串类型的数据
render
返回html文件
redirect
重定向

path()函数
用于描述路由和视图函数的对应关系
from django.urls import path
语法:
path(route, views, name)
route:字符串类型,匹配的请求路径
views:指定路径所对应的视图处理函数的名称
name:为地址取别名, 在模板中地址反向解析时使用
静态文件配置
登录功能
我们默认将网站所使用的的静态文件放在static文件夹中
静态文件:前端已经写好的,能够直接调用使用的文件(js文件,css文件或者用到的图片等等)

如果想要看到静态文件,要开设静态文件对应的接口,去settings中加入以上内容

这个令牌其实是可以更改的,但是如果更改了这个令牌,html文件中的静态文件前缀也要改变,所以有个比较简便的方法
直接导入静态文件:{% load static%}

form表单action参数
- 不写,默认朝当前所在的url提交数据
- 全写,指名道姓
- 只写后缀,/login/
form表单method参数:post提交数据
(提交post请求会报错,先去中间件将第四个进行注释)
request对象
request.method:返回请求方式,并且是全大写的字符串形式
# 获取用户提交的数据
request.POST:获取用户提交POST请求的数据
request.POST.get():只能获取列表中最后一个元素
request.POST.getlist():直接将列表取出
request.GET:获取用户提交的get请求数据
request.GET.get():只能获取列表中最后一个元素
request.GET.getlist():直接将列表取出
Django-通过python连接Mysql-day03
request.method:返回请求方式
request.POST:接收用户post请求提交的所有数据
request.POST.get()
request.POST.getlist()
pycharm链接数据库



插入表数据

绿色上箭头保存数据
django链接数据库

在操作mysql的时候有一个全新的用法:django ORM
ORM:对象影射关系
利用python面向对象的代码简单便捷的操作数据库
类 --> 表
对象-->记录
对象属性-->记录某个字段对应的值
操作orm
- 在models.py中书写模型类

- 进行数据库的迁移
将操作记录记录到migrations文件夹中
python manage.py makemigrations
将操作同步到数据库中
python manage.py migrate
注意:只要修改了models.py中跟数据库相关的代码,就必须执行上述两条数据库迁移命令
字段的增删改查
# 字段的增加
必须给出默认值或者允许改字段为空
1.直接给字段设置默认值

2.字段为空

然后再执行数据库的迁移
# 字段的删除
直接注释对应的代码或者删除代码,然后执行数据库的迁移
# 字段的修改
直接修改代码,然后执行数据库的迁移命令
数据的增删改查
# 查询数据库数据

返回值可以看成是列表套数据对象的格式,它支持索引取值,切片操作,但是不支持负数索引
不推荐使用索引的方式取值,而是first()

# 增加数据
第一种:

返回值就是当前创建的对象本身
第二种增加:


写一个数据展示的功能:将数据库中的数据全部展示到前端页面,然后给每条数据增加两个按钮,一个编辑,一个删除


# 修改
怎么确保用户点击的哪个按钮:
将编辑按钮所在那行的数据的主键值发送给后端,利用url问号后面携带参数的方式




删除数据

表与表之间的关系
一对一
一对多
多对多
图书表
出版社表
作者表
作者详情表
ForeignKey:表示设置外键
参数:
to:表示要关联的表(必须的)
to_field:表示要关联的字段(可选,默认关联主键)
on_delete:表示当删除关联表中的数据时,当前表和关联表的行为,有多个选项:
CASCASE:级联删除
PROTECT:会报完整性错误
SET_NULL:会把外键设置为null(前提是可以允许为null)
SET_DEFALUT:会设置默认值
SET():会调用外面的值



Django请求声明周期流程图-day-04

路由层
关于url后面加斜杠的问题,有时候没有加斜杠,也会自动帮你加上去进行匹配,其实是django帮你做的
# 取消自动加斜杠
APPEND_SLASH = False
re_path(正则表达式, 视图函数, name)

无名分组

正则匹配会将括号内匹配的内容当做位置参数传给后面的视图函数
有名分组
正则表达式有名分组模式:(?P<name>正则)

就是将括号内正则表达式匹配到的内容当做关键字参数传递给后面的视图函数
注意:无名分组和有名分组不能混用
虽然不能混用,但是同一个分组可以使用多次

反向解析
- 先给url起个别名

- 去前端进行反向解析
{% url 别名 %}

- 后端反向解析

无名分组有名分组反向解析
无名分组:
前端

后端

有名分组:
前端(两种都可以)

后端(两种都可以)

路由分发

直接去urls中把代码复制到子路由文件中

现在两个路由都是一样的情况,怎么区分当前url属于哪个应用:
利用路由分发之后,总路由不再干路由和视图函数的直接对应关系,而是做分发处理,识别当前url是属于哪个应用的
通过include方法进行路由分发

也可以不用导入模块

Django-视图层day05
视图的第一个参数必须为HttpRequest实例,且视图必须返回一个HttpResponse对象或者子对象作为响应
HttpResponse
返回字符串类型
render
返回html页面
redirect
重定向
JsonResponse

JsonResponse默认只能序列化字典对象,如果要序列化其他需要加上参数safe=False

request对象
request.method:获取请求的方式
request.POST:只能获取到post请求提交的普通的键值对数据,文件不行
request.GET:获取get请求
request.FILES:获取文件
request.get_full_path():获取完整的url
form表单上传文件及后端如何获取
form表单上传文件类型的数据:
1.method必须指定为post
- enctype必须换成form-data
enctype就是encodetype编码类型的意思
multipart/form-data是指表单数据由多部分构成,既有文本数据,又有文件等二进制数据
默认情况下,enctype的值是
application/x-www-form-urlencoded,不能上传文件,只能上传文本格式的数据
后端获取:


FBV和CBV
FBV:基于函数的视图
CBV:基于对象的视图,将视图函数的逻辑拆成类下面的多个函数,一开函数调用来实现完整的逻辑
定义的类要继承父类View
getattr():反射
handler = getattr(自己写的类产生的对象, ‘get’/’post’, 当找不到get或者post属性或者方法时就会用到第三个参数)
handler = 我们自己写的类里面的get或者post方法
模板层
模板语法是用来把后端数据传给前端
语法:
{{ }}:变量相关
{% %}:逻辑相关
python所有的基本数据类型都可以传递到前端页面,除了基本数据类型外,函数也是可以的
传递函数名,展示的是函数的返回值,这个地方不需要括号,直接放函数名会自动调用此函数,且模板语法不支持给函数传递额外的参数

类的话也是传递类名可以自动帮你实例化,同样有参数也是不行的

这些数据的取值,也是有固定的格式的

过滤器(最多有两个参数)
过滤器类似于是模板语法的内置方法
# 基本语法
{{数据|过滤器:参数}}
1.统计字符串长度

2.默认值

- 日期格式

- 切片操作(支持步长)

5.截取字符串(网页上的文章的摘要,只需要部分的文字,多出来的用省略号显示,省略号也包括在字数内)

- 截取单词(不包括三个点)

- 移除字符

- 拼接操作

- 加法(除了给数字加法之外还能给字符串进行拼接)

- 转义

标签
for循环

for循环内部可以访问到一个forloop变量,这个变量有很多属性可以查看循环进程的信息

📮评论