zoukankan      html  css  js  c++  java
  • 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

          表示原地址永久失效,

  • 相关阅读:
    SQL SERVER中一些常见性能问题的总结
    【BZOJ2554】Color 概率神题
    【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组
    【BZOJ1879】[Sdoi2009]Bill的挑战 状压DP
    【BZOJ2668】[cqoi2012]交换棋子 费用流
    【BZOJ4372】烁烁的游戏 动态树分治+线段树
    【BZOJ3470】Freda’s Walk 概率与期望
    【BZOJ2087】[Poi2010]Sheep 几何+DP
    【BZOJ4428】[Nwerc2015]Debugging调试 记忆化搜索+分块
    【BZOJ2137】submultiple 高斯消元求伯努利数
  • 原文地址:https://www.cnblogs.com/shannen/p/11283049.html
Copyright © 2011-2022 走看看