01.请求和响应
请求是指浏览器端通过HTTP协议发送给服务器端的数据
响应是指服务器端接受到请求后做出相应的处理后再回复给浏览器端的数据
请求样例:
请求在Django中实则就是函数视图的第一个参数,即HttpRequest对象
Django接收到http协议的请求后,会根据请求数据报文创建HttpRequest对象
HttpRequest对象通过属性描述了请求的所有相关信息
例子:
02.GET请求和POST响应
无论是GET还是POST,统一都有视图函数接收请求,通过判断request.method区分具体的请求动作
GET处理
GET请求动作,一般用于向服务器获取数据
能够产生GET请求的场景:
- 浏览器地址栏输入URL回车后
-<a href = “地址?参数=值&参数=值”>
-form表单中的method为GET
GET请求方式中,如果有数据需要传递给服务器,通常会用查询字符串(Query String)传递
-- 如:http://127.0.0.01:8000/page?a=100&b=200
例子:
POST处理
post请求动作,一般用于向服务器提交大量/隐私数据
03.Django的设计模式及模板层
MTV代表Model--Template--View(模型--模板--视图)模式
M (模型层) 负责与数据局交互
V (模板层)负责呈现内容到浏览器
C(视图层)核心,负责接受请求,获取数据,返回结果
什么是模板
1.模板就是可以根据字典数据动态变化的html页面
2.模板可以根据视图中传递的字典数据动态生成相应的HTML网页
在settings.py中TEMPLATES配置项
'BACKEND' 指定模板的引擎
'DIRS' 模板的搜索目录
'APP_DIRS' 是否需要在应用中搜索模板文件
'OPTIONS' 有关模板的选项
需要在settings.py文件添加 'DIRS': [os.path.join(BASE_DIR,'templates')],
使用render()直接加载并相应模板
在视图函数中: from django.shortcuts import render retrun render(request,'模板文件名',字典数据)
04.模板层-变量和标签
视图函数可以将python变量封装到字典中传递到模板上
例子: def xx_view(request):
dic = {"变量名1":"值1","变量名2":"值2"}
return render(request,'xx.html',dic)
能传递到模板中的数据类型:
str int list tuple dict func obj
在模板中使用变量语法:{{变量名}} {{变量名.index}} {{变量名.key}} {{对象.方法}} {{函数名}}
例子
views.py代码:
urls.py代码:
html代码:
输出代码如下:
模板标签
作用:将一些服务器端功能嵌入到模板中,例如流程控制等
语法:{%标签%}……{%结束标签%}
if 标签
语法:{% if 条件表达式1 %}……{% elif 条件表达式2 %}……{% endif %}
官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/#if
例子:
urls.py代码:
views.py代码:
if_html.html代码:
输出如下:
练习:
for标签
语法:{% for 变量 in 可迭代对象 %} …循环语句{% empty %}……可迭代对象无数据时填充的语句 {% endfor %}
内置变量 --forloop
例子:
if_html代码:
views.py代码:
urls.py代码:
05.模板层-过滤器和继承
模板过滤器
定义:在变量输出时对变量的值进行处理
作用:可以使用过滤器来改变变量的输出显示
语法:{{变量 | 过滤器1:'参数值1' | 过滤器2:'参数值2'...}}
继承
模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并覆盖父模板中相应的块
语法 -- 父模板中:
定义父模板中的块block标签
标识出哪些在子模块中是允许被修改的
block标签:在父模板中定义,可以在子模板中覆盖
语法:-- 子模板中:
继承模板extends标签(写在模板文件的第一行)
例如{%extends 'base.html' %}
子模板 重写父模板中的内容块
{% block block_name%}
子模板块用来覆盖父模板中 block_name块的内容
{% endblock block_name %}
06.url反向解析
代码中ur出现的位置
一.模板【HTML中】
1.<a href = 'url>超链接</a>
2.<form action = 'url method = 'post'>
二.视图函数中 --302跳转
httpresponseredirect('url')
url反向解析是指在视图或模板中,用path定义的名称来动态查找或计算出相应的路由
path函数的语法
path(route,views,name = '别名')
path('page',view.page_view,name = "page_url)
根据path中的‘name=’关键字传参给url确定了唯一确定的名字,在模板和或视图中,可以通过这个名字反向推断出此url信息