GET处理
GET取值:
request.GET['参数名']
request.GET.get('参数名','默认值')
request.GET.getlist('参数名') // 一个参数多个值适用
POST处理
适用于form表单,需指明传值方法和指定路由
POST取值:
request.POST['参数名']
request.POST.get('参数名','默认值')
resuest.POST.getlist('参数名')
post提交时,存在伪造攻击(跨站伪造请求),django为了防范这个,采用了csrf验证,
此时就会报403响应。(目前暂时采用关闭验证),即:
禁止掉settings.py中MIDDLEWARE中CsrfViewsMiddleWare的中间件(注释掉)
模板层
模板配置
1.创建模板文件夹:<项目名>/templates
2.在settings.py中TEMPLATES配置项:
BACKEND:指定模板引擎
DIRS:模板的搜索目录
APP_DIRS:是否要在应用中的templates文件中搜索模板文件
OPTION:有关模板选项
配置项中需要修改:
'DIRS':[os.path.join(BASE_DIR,'templates')]
模板加载
1.通过loader获取模板:
from django.templates import loader
t = loader.get_template('模板文件名')
html = t.render(字典数据)
return HttpResponse(html)
2.通过render()直接加载并响应模板
from django.shortcuts import render
return render(request,'模板文件名',字典数据)
视图与模板交互
1.视图中通过字典类型传递到模板
2.模板中通过{{变量名}}来直接获取
模板中的标签
功能:将一些服务器端的功能镶嵌在模板中
语法:{% 标签 %}
{% 结束标签 %}
for循环:内置变量 --- forloop
forloop.counter ---- 循环当前迭代(从1开始索引)
forloop.counter0 ---- 循环当前迭代(从0开始索引)
forloop.recounter ---- counter值的倒序
forloop.revcounter ---- revcounter值的倒序
forloop.first ---- 如果是第一次通过循环,返回真
forloop.last ---- 如果是最后一次通过循环,返回真
forloop.parentloop ---- 当嵌套循环,parentloop表示外层循环
模板中的过滤器
语法:{{ 变量名|过滤器:"参数"|过滤器.... }}
常见过滤器:
lower ---- 字符串转小写
upper ---- 字符串转大写
safe ---- 默认不对变量进行html转义(如果传入的字符存在js代码,html会将其符号进行转义,所有就需要过滤掉)
add ---- 将value的值加n
模板中的继承
语法 - 父模板:
定义父模板中的块block标签
标识除哪些子模版是允许被修改
block标签:在父模板中定义,可以在子模版中覆盖
子模版:
继承模板extends标签
例:{% extends 'base.html' %}
子模板重写父模板的内容块
例:{% block block_name %}
内容
{% endblock block_name %}
注意:模板继承中,视图中模板传的变量是不可以进行传参到子模板中
【只继承的是模板中的样式,静态的,动态变量是继承不了的!!!】
URL反向解析
利用path中第三个参数--->name(不用考虑路径地址)
语法:path(route,views,name='别名')
模板中:
{% url '别名' %}
{% url '别名' '参数1' '...' %}
视图中:
from django.urls import reverse
reverse('别名',传参)