python之视图函数(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()  :可以直接将函数中所有的变量传给模板  

猜你喜欢

转载自www.cnblogs.com/Adairye/p/12113063.html