天天看点

Django-视图

如需了完整内容请访问:​​https://www.emperinter.info/2022/05/31/django-view/​​

视图

概述

  • 作用:
  • 视图接受web请求,并响应Web请求
  • 本质:
  • 视图就是 一个Python中的函数
  • 响应内容:
  • 网页
  • 重定向
  • 错误视图
  • 404:url找不到
  • 500: 服务器内部错误
  • JSON数据

URL 配置

配置流程

  • 在​

    ​settings.py​

    ​中指定根级URL配置文件:​

    ​ROOT_URLCONF = 'project.urls'​

    ​,默认实现了。
  • ​urlpatterns​

    ​:
  • 一个url实例的对象
  • url对象
  • 正则表达式
  • 视图名称
  • 名称(用来反向解析的)
  • url匹配正则的注意事项:
  • 如果想要从url中获取一个值,需要对正则加小括号
  • 匹配正确,前方不需要加小斜杠​

    ​/​

    ​,一般在最后加
  • 正则前需要加​

    ​r​

    ​表示字符串不转义

引入其它url配置

  • 一般在应用中创建​

    ​urls.py​

    ​​文件,定义本应用的url配置,在工程​

    ​urls.py​

    ​​文件中使用​

    ​include()​

    ​​方法:​

    ​url(r'^', include('myApp.urls',namespace='myApp')),​

匹配过程

  • 工程url->应用url->视图

URL的反向解析(代理):

  • 概述
  • 如果在视图/模板中使用了硬编码的连接,在url配置发生改变时,动态生成链接的地址。
  • 解决思路
  • 在使用链接时,通过url配置的名称,动态生成url地址。
  • 作用
  • 使用url模板的时候

视图函数

定义视图:

  • 本质:一个函数
  • 视图参数:
  • ​request​

    ​ 一个HttpRequest的实例
  • 通过url正则表达式获取的参数
  • 位置:
  • 一般在​

    ​views.py​

    ​中定义

错误视图

  • 404视图
  • 找不到网页(url匹配不成功)时返回。
  • 可以自己定义。
  • 在​

    ​templates​

    ​​下定义​

    ​404.html​

  • ​request_path​

    ​:导致出错的网址。
  • 配置​

    ​settings.py​

  • ​DEBUG​

    ​​ 如果为​

    ​True​

    ​ 永远不会调用404.html页面
  • ​ALLOWED_HOSTS = [*]​

  • 500视图
  • 在视图代码中出现错误(服务器代码)。
  • 400视图
  • 错误是客户的操作。

HttpRequest对象

概念

  • 接收HTTP请求后,会根据报文创建​

    ​HttpRequest​

    ​对象
  • 视图的第一个参数就是​

    ​HttpRequest​

    ​对象
  • Djano对象创建的,之后调用试图传递给视图

属性

  • ​path​

  • 请求的完整路径(不包括域名和端口)
  • ​method​

  • 表示请求的方式,常用的有GET、POST
  • ​encoding​

  • 表示浏览器提交的数据的编码方式,一般为​

    ​utf-8​

  • ​GET​

  • 类似字典的对象,包含了get请求的所有参数
  • ​POST​

  • 类似字典的对象,包含了post请求的所有参数
  • ​FILES​

  • 类似字典的对象,包含了所有上传的文件。
  • ​COOKIES​

  • 字典,包含所有的cookie
  • ​session​

  • 类似字典的对象,表示当前会话

方法

  • ​is_ajax()​

  • 如果是​

    ​XMLHttpRequest​

    ​​发起的,返回​

    ​True​

QueryDict对象

  • request对象中的GET、POST对象都属于QueryDict对象
  • 方法
  • ​get()​

  • 作用:根据键获取值
  • 只能获取一个值
  • ​www.baidu.com/abc?a=1&b=2&c=3​

  • ​getlist()​

  • 将键的值以列表形式返回
  • 可以获取多个值
  • ​www.baidu.com/abc?a=1&a=2&c=3​

    ​ (注意有两个a)

GET属性

# 获取get传递的数据  
def get1(request):  
    a = request.GET.get("a")  
    b = request.GET["b"]  
    c = request.GET.get("c")  
    return  HttpResponse(a + " " + b + " " + c)  
  
def get2(request):  
    a = request.GET.getlist('a')  
    a1 = a[0]  
    a2 = a[1]  
    b = request.GET.get('c')  
    return HttpResponse(a1 + " " + a2 + " " + b)      

POST属性

  • 使用表单模拟提交post请求
  • 关闭​

    ​CSRF​

    ​:
MIDDLEWARE = [  
    'django.middleware.security.SecurityMiddleware',  
    'django.contrib.sessions.middleware.SessionMiddleware',  
    'django.middleware.common.CommonMiddleware',  
    # 'django.middleware.csrf.CsrfViewMiddleware',  
    'django.contrib.auth.middleware.AuthenticationMiddleware',  
    'django.contrib.messages.middleware.MessageMiddleware',  
    'django.middleware.clickjacking.XFrameOptionsMiddleware',  
]      
  • test case
def showregister(request):  
    name = request.POST.get("username")  
    gender = request.POST.get("gender")  
    age = request.POST.get("age")  
    hobby = request.POST.getlist("hobby") # checkbox  
  
    info = str("name:\t" + name + "\tgender:" +gender + "\tage:" + age + "\thobby"+ str(hobby))  
    print(info)  
  
    return  HttpResponse(info)      

HttpResponse对象