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('别名',传参)