视图函数
接受Web请求并且返回Web响应。由此,视图函数应该接收请求对象HttpRequest,并返回响应对象HttpResponse。
request
django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest 类中的属性。
request.scheme # 请求的协议,一般为http或者https,字符串格式(以下属性中若无特殊指明,均为字符串格式)
request.body #http请求的主体,二进制格式。
request.path # 所请求页面的完整路径(但不包括协议以及域名),也就是相对于网站根目录的路径。
request.path_info # 获取具有 URL 扩展名的资源的附加路径信息。相对于HttpRequest.path,使用该方法便于移植。
request.method # 获取该请求的方法,比如: GET POST PUT.........
request.encoding # 获取请求中表单提交数据的编码。
request.content_type # 获取请求的MIME类型(从CONTENT_TYPE头部中获取)。
request.content_params # 获取CONTENT_TYPE中的键值对参数,并以字典的方式表示。
request.GET # 返回一个 querydict 对象(类似于字典),该对象包含了所有的HTTP GET参数
request.POST # 返回一个 querydict ,该对象包含了所有的HTTP POST参数,通过表单上传的所有字符都会保存在该属性中。
request.COOKIES # 返回一个包含了所有cookies的字典。
request.FILES # 返回一个包含了所有的上传文件的querydict对象。通过表单所上传的所有文件都会保存在该属性中。key的值是input标签中name属性的值,value的值是一个UploadedFile对象
request.META # 返回一个包含了所有http头部信息的字典
request.site # 中间件属性
request.session # 中间件属性
request.user(用户认证组件下使用) #中间件属性,一个 AUTH_USER_MODEL 类型的对象,表示当前登录的用户。
# 该类有许多字段,属性和方法。列举几个常用的:
# 字段:
# username,first_name,last_name,email,password,groups,user_permissions,is_staff(布尔值,标明用户是否可以访问admin页面),
# is_superuser,last_login(上一次登陆时间),date_joined(用户创建时间)
# 属性:is_authenticated 布尔值,标志着用户是否已认证。
# 方法:
# HttpRequest.user.get_username()获取username。尽量使用该方法来代替使用username字段
# HttpRequest.user.get_full_name()获取first_name和last_name
# HttpRequest.user.short_name()获取first_name
# HttpRequest.user.set_password(raw_password)
# HttpRequest.user.check_password(raw_password)
# HttpRequest.get_host()返回请求的源主机。
# HttpRequest.get_port()
# HttpRequest.get_full_path()返回完整路径
# HttpRequest.bulid_absolute_uri(location) 返回location的绝对uri,location默认为request.get_full_path()。
HttpResponse
响应对象主要有三种形式:
- HttpResponse()
传入字符串作为响应体
example1:
def test_name(request): return HttpResponse("testname")
- example2:
-
def test(request): return HttpResponse(reverse("app01:test"))
- render()
render(request, template_name[, context])
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
参数: request: 用于生成响应的请求对象。
template_name:要使用的模板的完整名称
可选的参数 context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
def test(request): # 测试反向解析 return render(request,‘url_test.html‘)
- redirect()
参数可以是一个URL(或URL的别名)
example1:
在views.py中
def testname(request): # 此处tn是别名 return redirect("tn")
在urls.py中
urlpatterns = [ path(‘test_name/‘,views.test_name,name="tn"), ]
example2:
def view_test(request): return redirect("https://www.cnblogs.com/shannen/")
example3:
def view_test(request): return redirect("/test/url/")
也可以是一个视图函数
example4:
def view_test(request): # return redirect(test) return redirect(test_my_converter,2019) def test(request): # 测试反向解析 return render(request,‘url_test.html‘) def test_my_converter(request,year): return HttpResponse("test_my_converter<br>year:"+str(year))
redirect默认返回一个临时重定向,设置参数permanent=True时,将返回一个永久重定向。
临时重定向与永久重定向:
临时重定向:
状态码:302
表示原地址仍旧可以访问,只是临时地从原地址重定向到目标地址
永久重定向:
状态码:301
表示原地址永久失效,
原文地址:https://www.cnblogs.com/shannen/p/11283049.html