Django视图层(views.py)

视图函数

  接受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