Django-Views

视图概述
Django中的视图主要用来接受web请求,并作出响应
视图的本质就是一个python中的函数
视图的相应分为两大类:
    以json数据形式返回
    以网面的形式返回
        重新定向到另一个网页
        错误视图(40x,50x)
视图相应过程:游览器输入->django获取信息并去掉ip端口,剩下的路径->urls路由匹配->视图相应->回馈到服务器

url配置
配置流程:setting中指定url配置文件,对应的属性的ROOT_URLCONF
urlspatterns:一个url实例的列表,全在根配置搞定
    内部由url组成(正则匹配路径)
    url('rLearn/',views.learn)
导入其他url配置:
    在应用中创建urls.py文件,编写匹配规则,在工程urls.py中进行导入
    导入包含:
        from.django.conf.urls import include
        urlpatterns = [url(r'^xxx',include('APP.urls'))]
    url正则匹配注意事项:
        正则匹配时候从上到下开始遍历,匹配到了就不会继续往后寻找了
        匹配的正则前方不需要加反斜线
        正则前需要加(r)表示字符串不转义

获取url路径上的参数
如果需要从url中获取一个值,需要对正则加小括号
url(r'^grade/(d+)$',views.getStudents),
注意,url匹配中添加了()取参,在请求调用的函数中必须接收 def getStudent(request,classld):
如果需要获取url路径中的多个参数,那就添加多个括号,默认按照顺序匹配路径名字
url(r'^news/(d{4})/(d)+/(d+)$',views.getNews),
匹配年月日 def getNews(request,year,month,day):

参数也可以使用关键字参数形式:
url(r'news/'(?P<year>d{4})/(?P<month>d)+/(?P<day>d+)$,views.getNews)

路径中的参数使用圆括号()进行获取,限制是一个圆括号对应视图函数中的一个参数
位置参数按照书写顺序进行排序
关键字参数 按照参数名称匹配,和顺序就无关了
参数必须和视图函数中的参数一致(除了默认的requst)

2020.1.4 未完

url反向解析:
在根urls中:
url(r'^'views/,include('ViewsLearn.urls',namespace = '111')),
在子urls中:
url(r'^hello/(+d)',views.hello.name='222'),
在模板中使用
<a href ="{%url'111:222' year = 2017%}">Hello</a>
year的位置如果不指定名称按顺序算,指定名称按=算
在视图中使用
HttpResponseRedirect(reverse('view:sayhello',kwargs={}))
kwargs是字典
反向解析的优点:
如果在视图,模板使用硬编码连接,在url配置发生改变时,需要的变更的代码会变多,这样导致代码的结构不稳定不容易维护,使用反向解析可以提高代码的拓展性和可维护性
反向解析:
根据跟路由中注册的namespace和在子路由中注册name,这两个参数来动态获取我们的路径
在模板中使用{%url 'namaspace.name'%}
如果带有位置参数{%url 'namaspace.name' value1 value2 value3%}
如果带有关键字参数{%url 'namaspace.name'key1 = value1, key2 = value2%}


作业:
班级和学生级联显示:
班级列表
班级列表可以点击
点击之后显示本班的所有学生
要求:
路径全部使用反向解析
在学生列表页添加点击事件
点击学生进入学生详细
在详细中,存在删除按钮,点击可以删除
在学生列表最后,添加输入窗口,可以添加学生


视图的本质是一个函数
视图参数:1.一个HttpResponse的实例
2.通过正则表达式获取过来的参数
位置:通常在应用下的views.py中定义
错误视图:1.404视图(页面没有找到)
2.400视图(客户操作错误)
3.500视图(服务器内部错误)
自定义错误视图
在工程的templates文件夹下创建对应的错误文件
获取请求路径{{request_path}}
在文件中自定义自己的错误样式
注意主要在关闭Debug的情况下可以
没有关闭的情况下会直接在界面中显示log

HttpRequest
服务器在收到Http请求后,会根据报文创建一个HttpResponse对象
Django框架会自己进行包装,之后传递给视图
属性:path 请求完整的路径
method 请求的方式,将用GET,POST
encoding 编码类型 常见utf-8
GET 类似字典的参数,包含了get的所有参数
POST 类似字典的参数,包含了post的所有参数
FILES 类似字典的参数,包含了上传的文件
COOKIES 字典,包含了所有的COOKIES
session 类似字典,表示会话
方法: is_ajax() 判断是否是ajax(),通常用在移动端和JS中

print(request.path) /homework/zz/
print(request.body) b''
print(request.COOKIES) {'csrftoken': 'VGHcTYr5D3v6doWGPb4IDvAErPG85PMXQBpJf8j24g1IFVN6Jbqyx6ut47esCjly'}
print(request.FILES) <MultiValueDict: {}>
print(request.GET) <QueryDict: {}>

--------------------------------------------------------------------------------------------------------------------在网页中加入一个post

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Student</title>
</head>
<body>
<form action=""method = 'post'>
<span>Username:</span><input type="text" name = 'username' placeholder="please input your username">
<button>Submit</button>
</form>
</body>
</html>

效果图

原文地址:https://www.cnblogs.com/SmartCat994/p/12306966.html