首页 > 其他 > 详细

Django中views笔记

时间:2018-12-31 21:41:06      阅读:206      评论:0      收藏:0      [点我收藏+]

一、 reverse反解析

技术分享图片
1 #路由中定义namespace、name,reverse可将其转换为url
2 url = reverse(namespace:name)
3 return redirect(url)
View Code

二、HttpRequest对象

1.路径参数

  位置参数

  • 应用中urls.py

     url(r‘^(\d+)/(\d+)/$‘, views.index),
    
  • 视图中函数: 参数的位置不能错

    def index(request, value1, value2):
          # 构造上下文
          context = {‘v1‘:value1, ‘v2‘:value2}
          return render(request, ‘Book/index.html‘, context)
    

  关键字参数

  • 应用中urls.py

    • 其中?P<value1>部分表示为这个参数定义的名称为value1
    • 可以是其它名称,起名要做到见名知意

      url(r‘^(?P<value1>\d+)/(?P<value2>\d+)/$‘, views.index),
      
  • 视图中函数: 参数的位置可以变,跟关键字保持一致即可

    def index(request, value2, value1):
          # 构造上下文
          context = {‘v1‘:value1, ‘v2‘:value2}
          return render(request, ‘Book/index.html‘, context)

2.查询字符串Query String

  获取请求路径中的查询字符串参数(形如?k1=v1&k2=v2),可以通过request.GET属性获取,返回QueryDict对象。

技术分享图片
 1 # /get/?a=1&b=2&a=3
 2 
 3 def get(request):
 4     a = request.GET.get(a)
 5     b = request.GET.get(b)
 6     alist = request.GET.getlist(a)
 7     print(a)  # 3
 8     print(b)  # 2
 9     print(alist)  # [‘1‘, ‘3‘]
10     return HttpResponse(OK)
View Code

3.表单类型 Form Data

前端发送的表单类型的请求体数据,可以通过request.POST属性获取,返回QueryDict对象。

技术分享图片
1 def post(request):
2     a = request.POST.get(a)
3     b = request.POST.get(b)
4     alist = request.POST.getlist(a)
5     print(a)
6     print(b)
7     print(alist)
8     return HttpResponse(OK)
View Code

4.非表单类型 Non-Form Data

非表单类型的请求体数据,Django无法自动解析,可以通过request.body属性获取最原始的请求体数据,自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型。

例如要获取请求体中的如下JSON数据

{"a": 1, "b": 2}

可以进行如下方法操作:

技术分享图片
1 import json
2 
3 def post_json(request):
4     json_str = request.body
5     json_str = json_str.decode()  # python3.6 无需执行此步
6     req_data = json.loads(json_str)
7     print(req_data[a])
8     print(req_data[b])
9     return HttpResponse(OK)
View Code

5.请求头

可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。

常见的请求头如:

  • CONTENT_LENGTH– The length of the request body (as a string).
  • CONTENT_TYPE– The MIME type of the request body.
  • HTTP_ACCEPT– Acceptable content types for the response.
  • HTTP_ACCEPT_ENCODING– Acceptable encodings for the response.
  • HTTP_ACCEPT_LANGUAGE– Acceptable languages for the response.
  • HTTP_HOST– The HTTP Host header sent by the client.
  • HTTP_REFERER– The referring page, if any.
  • HTTP_USER_AGENT– The client’s user-agent string.
  • QUERY_STRING– The query string, as a single (unparsed) string.
  • REMOTE_ADDR– The IP address of the client.
  • REMOTE_HOST– The hostname of the client.
  • REMOTE_USER– The user authenticated by the Web server, if any.
  • REQUEST_METHOD– A string such as"GET"or"POST".
  • SERVER_NAME– The hostname of the server.
  • SERVER_PORT– The port of the server (as a string).

具体使用如:

def get_headers(request):
    print(request.META[‘CONTENT_TYPE‘])
    return HttpResponse(‘OK‘)

6.其他常用HttpRequest对象属性

  • method:一个字符串,表示请求使用的HTTP方法,常用值包括:‘GET‘、‘POST‘。
  • user:请求的用户对象。
  • path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
  • encoding:一个字符串,表示提交的数据的编码方式。

    • 如果为None则表示使用浏览器的默认设置,一般为utf-8。
    • 这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
  • FILES:一个类似于字典的对象,包含所有的上传文件。

三、HttpResponse对象

 

1 HttpResponse

可以使用django.http.HttpResponse来构造响应对象。

HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)

技术分享图片
1 from django.http import HttpResponse
2 
3 def response(request):
4     return HttpResponse(itcast python, status=400)
5     或者
6     response = HttpResponse(itcast python)
7     response.status_code = 400
8     response[itcast] = Python
9     return response
View Code

2 HttpResponse子类

Django提供了一系列HttpResponse的子类,可以快速设置状态码

  • HttpResponseRedirect 301
  • HttpResponsePermanentRedirect 302
  • HttpResponseNotModified 304
  • HttpResponseBadRequest 400
  • HttpResponseNotFound 404
  • HttpResponseForbidden 403
  • HttpResponseNotAllowed 405
  • HttpResponseGone 410
  • HttpResponseServerError 500

3 JsonResponse

若要返回json数据,可以使用JsonResponse来构造响应对象,作用:

  • 帮助我们将数据转换为json字符串
  • 设置响应头Content-Type为application/json
技术分享图片
1 from django.http import JsonResponse
2 
3 def response(request):
4     return JsonResponse({city: beijing, subject: python})
View Code

4 redirect重定向

技术分享图片
1 from django.shortcuts import redirect
2 
3 def response(request):
4     return redirect(/get_header)
View Code

 

四、cookie和session

示例代码:

技术分享图片
 1 def set_cookie(request):
 2     ‘‘‘设置cookie‘‘‘
 3     name=request.GET.get(name)
 4     pwd=request.GET.get(pwd)
 5     response=HttpResponse(set cookie)
 6     response.set_cookie(name,name)
 7     response.set_cookie(pwd,pwd,max_age=60)
 8     return response
 9 
10 def get_cookie(request):
11     ‘‘‘获取cookie‘‘‘
12     name=request.COOKIES.get(name)
13     pwd=request.COOKIES.get(pwd)
14     return HttpResponse("name:%s,pwd:%s"%(name,pwd))
15 
16 def del_cookie(request):
17     ‘‘‘删除cookie‘‘‘
18     response=HttpResponse(del cookie)
19     response.delete_cookie(name)
20     return response
21 
22 def to_session(request):
23     ‘‘‘session操作‘‘‘
24     name=request.COOKIES.get(name)
25     # 1) 以键值对的格式写session。
26     request.session[name]=name
27     # 2)根据键读取值。
28     session_name=request.session.get(name)
29     return HttpResponse(%s%session_name)
30     # 3)清除所有session,在存储中删除值部分。
31     request.session.clear()
32     # 4)清除session数据,在存储中删除session的整条数据。
33     request.session.flush()
34     # 5)删除session中的指定键及值,在存储中只删除某个键及对应的值。
35     del request.session[name]
36     # 6)设置session的有效期单位秒
37     request.session.set_expiry(60)
View Code

 

Django中views笔记

原文:https://www.cnblogs.com/returnes/p/10203329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!