Django框架 - 07 视图操作

视图(views)

前言

MVT模式中的V,V代表视图,在Django中的视图主要用来接受web请求,并做出响应。视图的本质就是一个python中的函数.

视图的响应分为两大类:
以json数据形式返回
以网页的形式返回: 重定向到另一个网页, 错误视图页面(404,500等)

视图响应的过程:浏览器输入 → django获取信息并去掉ip:端口,身下路径 → urls路由匹配 → 视图响应 → 回馈到浏览器

1. url配置

(1)配置流程
settings中制定根级url配置文件,对应的属性ROOT_URLCONF
(2)urlpatterns
一个url实例的对象,全在根配置搞定
    内部由url组成(正则匹配路径)
    url(r‘^learn/’, views.learn)
(3)导入其他的url配置
在应用中创建urls.py 文件,编写配置规则,在工程urls.py中进行
导入包含
    From django.conf.urls import include
    urlpatterns = [url(r’^xxx/’, include(‘app.urls’))]

url配置正则注意事项:
    正则匹配时从上到下进行遍历,匹配到就不会继续向后查找了
    匹配的正则前方不需要加反斜杠
    正则钱需要加(r)表示字符串不转义

2. 获取url路径的参数

(1)url传递一个参数
如果需要从url中获取一个值,需要对正则加小括号
url(r‘^grade/(\d+)$’, views.getStudent)
注意,url匹配中添加了()取参,在请求调用的函数中必须接收 def getStudent(request, classid)

这里写图片描述

(2)url传递多个参数
如果需要获取url路径中的多个参数,那就添加多个括号,默认按照顺序匹配路径名字,参数顺序必须固定
定义url中传递三个参数的地址:
    url(r‘^news/(\d{4})/(\d)+/(\d+)$’, views.getNews)
实现方法:匹配年月日 def getNews(requests, year, month, day)

例子:查找计算机技术书籍下的脚本语言中的python的书籍信息
这里写图片描述

(3)使用关键词获取参数
参数也可以使用关键字参数形式,参数顺序可以任意
url(r’news/(?P<year>\d{4})/(?P<month>\d)+/(?P<day>\d+)$’, views.getNews)

这里写图片描述

3. 反向解析

(1)在模板中进行反向解析
1)关键字参数{% url  'namespace:name' key=value key1=value1 %}

2)定义url:
在根urls中:
    url(r’^apps/’, include(‘App.urls’, namespace=’app’))
在子urls中:
    url(r’^hello/(\d+)’, views.hello, name=’sayhello’)

3)在模板中使用:
<a href={% url ‘app:sayhello’  grade_id%}’>
其中grade_id是参数,其中参数可以使用位置参数,也可以使用关键词参数,和配置urls一样

这里写图片描述

(2)在views中使用反向解析

使用反向解析优点:
如果在视图中,模板中使用硬编码连接,在url配置发生改变时,需要变更的代码会非常多,这样导致我们的代码结构不是很容易维护,使用反向解析可以提高我们代码的扩展性和可维护性

HttpResponseRedirect(reverse(namespace:name, kwargs = {key1 : value1, key2 : value2}))

kwargs 是字典

这里写图片描述

4. 视图

(1)错误视图

位置:通常在应用下的views.py中定义
错误视图:
404视图(页面没有被找到 page not found)
400视图(客户端操作错误 bad request)
403视图(权限错误 403 forbidden )
500视图(服务器内部错误 server error)

(2)自定义错误视图
1)修改debug模式

在工程的settings中修改debug模式:
注意:
需要在debug=False的情况下才可以
没有关闭debug的情况下会在界面中直接显示错误的信息
这里写图片描述

2)在templates文件中定义自己的错误样式

这里写图片描述

5.请求与响应

(1)HttpRequest定义
服务器在接收到http请求后,会根据报文创建HttpRequest对象
视图中第一个参数就是HttpRequest对象
Django框架会进行自己的包装,之后传递给视图
属性:
    path       请求的完整路径
    method     请求的方法,通常get,post
    Encoding   编码方式,常用utf-8
    Get        类似字典的参数,包含了get的所有参数
    post       类似字典的参数,包含了post的所有参数
    Files      类似字典的参数,包含了上传的文件
    Cookies    字典,包含了所有的COOKIES
    Session    类似字典,表示会话
    方法: is_ajax()   判断是否是ajax(),通常在移动端和js中
(2)响应QueryDict类型
1)类似字典的结构数据,与字典的区别,可以存在相同的键
2)GET和POST都是QueryDict对象
3)QueryDict中数据获取方式
    dict[‘name’] 或者dict.get(‘name’)
    获取指定key对应的所有值
    dict.getlist(‘name’)

这里写图片描述

如下,获取重复提交数据的方法:
这里写图片描述

(3)响应
1)可以直接返回一个HttpResponse对象:
    服务器返回给客户端的数据,HttpResponse由程序员自己创建
    不使用模板,直接HttpResponse()
2)可以返回模板:
调用模板,进行渲染,直接使用render一步到位
返回表达式:
    render(request, template_name, context)
        request   请求体对象
        template_name  模板路径
        context   字典参数,用来填坑

3)属性:
    Content   返回的内容
    Charset   编码格式
    status_code  响应状态码(200,4xx,5xx)
        4xx 客户端的错误
        5xx 服务端的错误
    content_type   MIME类型,定义传输类型的,比如有xml,html,png等等,比如   content_type=’image/jpg’
4)方法:
    init    初始化内容
    write(xxx) 直接写到文本
    flush 冲刷缓冲区
    set_cookie(key, value=’’, max_age=None, exprise=None)
    delete_cookie(key)   删除cookie,上面是设置
4)重定向:
    HttpResponseRedirect响应重定向:可以实现服务器内部的跳转
    Return HttpResponseRedirect(‘/xxx/xxx’)
    使用的时候推荐使用反向解析
    JsonResponse
    使用json数据的请求,通常用在异步请求上jsonResponse(dict)
    content_type是application/json

视图函数控制器干的3件事情:

1.接收和验证用户的输入

2.对模型进行增删改查的操作

3.渲染视图,呈现给用户

猜你喜欢

转载自blog.csdn.net/hanbo6/article/details/82503312