Django中views笔记

一、 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

猜你喜欢

转载自www.cnblogs.com/returnes/p/10203329.html