zoukankan      html  css  js  c++  java
  • Django之视图函数(views.py)

    视图函数(views.py)简称视图,它接受web请求并且返回web响应。其中每个视图都要返回一个HttpResponse对象。

    http请求中会产生两个核心对象:

      http请求:HttpRequest对象,由Django自己创建

      http响应:HttpResponse对象,由开发自己创建

    所在位置:django.http

    HttpRequest对象的属性和方法:

      path:请求页面的全路径,不包括域名。

        def date(req,year):
          print(req.path)
          return HttpResponse(year)

        >>> /index/time/1995/12
      

      method:请求中使用的HTTP方法的字符串表示。全大写表示。

        def time(req):
          if req.method == "POST":
            return HttpResponse("POST OK!")
          elif req.method == "GET":
            return render(req,"Adair.html")

      GET:此方法中包含HTTP GET请求中的所有参数。

       def time(req):
        if req.method == "POST":
          return HttpResponse("POST OK!")
        elif req.method == "GET":
          print(req.GET)
          return render(req,"Adair.html")

        >>> <QueryDict: {'a': ['b']}>     返回的数据为字典形式,可以通过key获取对应的值(req.GET.getlist('KEY')

      POST:此方法中包含HTTP POST请求中的所有参数。

       def time(req):
        if req.method == "POST":
          print(req.POST)
          return HttpResponse("POST OK!")
        elif req.method == "GET":
          # print(req.GET)
          return render(req,"Adair.html")

      >>> form表单的提交为post的请求,所有也有可能接收到空的数据,需注意判断(req.POST.getlist('KEY'))

      

      COOKIES:包含所有cookies的标准python对象;key和value都是字符串。


      FILES:包含所有上传文件的类字典对象;FILES中的每个key都是<input type="file" name="" />标签中name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含三个keys:

          filename:上传文件名,用字符串表示

          content_type:上传文件的content type

          content:上传文件的原始内容

      user:是一个django.contrib.auth.models.User对象,代表当前登录的用户。如果访问用户当前没有登录,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以通过user的is_authenticated()方法来辨别用户是否登录;if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用

      session:唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用 

      

      get_full_path() :比如访问:http://127.0.0.1:8000/index/time/1995/12/?a=b   ,那req.get_full_path()得到的结果就是:/index/time/1995/12/?a=b;  req.path得到的结果是:/index/time/1995/12

      注:request.POST.get(‘key’) 、 request.GET.get('key', '')。如果传递过来的数值不为空,那么这两种方法都没有错误,可以得到相同的结果。但是如果传递过来的数值为空,那么request.POST[‘username’]则会提示Keyerror错误,而request.POST.get(‘username’)则不会报错,而是返回一个None。

    HttpResponse对象的属性和方法:

      每个view请求处理方法必须返回一个HttpResponse对象(HttpResponse类在Django.http.HttpResponse)

      HttpResponse对象上扩展的常用方法:

        页面渲染:render() 推荐   

             render_to_response()

        页面跳转:redirect("路径")

        locals()  :可以直接将函数中所有的变量传给模板  

  • 相关阅读:
    luogu1117 优秀的拆分 (后缀数组)
    hdu5238 calculator (线段树+crt)
    [模板]中国剩余定理/扩展中国剩余定理
    [模板]欧几里得算法/扩展欧几里得
    cf1088E Ehab and a component choosing problem (树形dp)
    cf1088D Ehab and another another xor problem (构造)
    cf1088C Ehab and a 2-operation task (构造)
    luogu3292 幸运数字 (点分治+线性基)
    2017-03-10<Git版本回退>
    2017-03-09<AS目录结构>
  • 原文地址:https://www.cnblogs.com/Adairye/p/12113063.html
Copyright © 2011-2022 走看看