标题:django 视图与路由 | 作者: catfish | 时间:2019年12月25日
暂无法显示图片

我只把相关常用的东西写下来。其他的,常用了我会补充。

限制请求method

from django.shortcuts import render
from django.views.decorators.http import require_http_methods

@require_http_methods(['GET','POST'])
def index(request):
    return render(request, 'index.html', locals())

django.http.decorators.http.require_http_methods([])

限制请求方式

django.views.decorators.http.require_GET

限制只能为get请求

django.views.decorators.http.require_POST

限制只能为post请求

django.views.decorators.http.require_safe

限制只能为get或者head请求

HTTPRequest对象

除非另有说明,否则,request的属性都是只读属性。

request.get_full_path

获得当前路径的完整相对路径。

request.path

获得当前路径的相对路径,不包括服务器提供的路径。不包括get请求的相关参数。

request.scheme

返回http或者https。

request.method

返回'GET'或者'POST',主要用于请求判断是GET或者POST。

request.GET

类字典对象,主要用于获得url链中的参数。

request.POST

类字典对象,主要获得表单中的参数。

request.COOKIES

cookie的字典,键值是字符串。关于cookies的使用如下:

response = HTTPResponse("hello world!")
response.set_cookie(key, value, [max_age=60), expires=datetime)]  # max_age和expires二选一,前者规定失效需要经过的时间,数字以秒为单位,后者规定cookie失效的日期。

request.COOKIES.get(key) # 提取相关值,如果没有,返回None

request.delete_cookie(key)

request.FILES

类字典,获得表单中提交的文件。键是name的值。用法如下:

<!--html-->
<form action='upload' method='post' enctype="multipart/form-data"> <!-- 从源码上来看要使用这个,否则会返回一个空字典 -->
	<input type="file" name="upload_file">
	<input type="submit">
</form>
# python
from django.http import HttpResponse

def upload(request):
    if request.method == 'POST':
		with open(filename, 'wb') as f:
			for chunk in request.FILES["file"].chunks():
				f.write(chunk)
		return HttpResponse('上传OK')

request.META

类字典。其中我认为有三个键比较常用。可以提出来使用。HTTP_USER_AGENT,获得请求头。REMOTE_ADDR获得客户端的IP地址。REMOTE_HOST客户端的主机名。HTTP_REFERER 获得来源的url链接,referer来英文中的意思是介绍人的意思,简单的说,当你从某个界面点击一个链接进入另一个界面,那么这个某个界面就是另一个界面的referer。

reqeust.session

当前会话,可读可写。类似于字典对象。

request.user

常用于验证用户是否登录。如果用户在登录状态,request.user.authenticated会返回true。

request.get_host()     # 返回域名
request.get_full_path()              # 返回完整路径
request.get_raw_uri()    # 返回uri
request.is_secure()                     # 是否是https形式
request.is_ajax()                                         #是否是ajax请求,原理在请求头中X-Request-With:XMLHttpRequest

QueryDict对象

类似于request.GET和request.POST都属于QueryDict对象,获取单一对象用get方法,返回一个字符串。若是复选框有多个对象用getlist方法,返回一个列表。

django和视图相关的库介绍

django.http 函数

JsonResponse, HttpRequest, HttpResponse, StreamingHttpResponse, FileResponse, Http404,HttpResponseRedirect

django.urls函数

reverse, resolve前有"/"后没有,否则会报错。

django.shortcuts函数

render, redirect, get_object_or_404, get_list_or_404

TemplteResponse

用于惰性渲染。

from django.template.response import TemplateResponse

def blog_index(request):
    return TemplateResponse(request, 'entry_list.html', {'entries': Entry.objects.all()})

django路由相关库介绍

django.urls函数

path, re_path, include, register_converter

django.conf.urls 函数

static, url, handler400, handler403, handler404, hander500

其中handler400, handler404, handler403在request参数后加上了一个exception。

# urls.py
from django.conf.urls import handler404
from blog import views

handler404 = views.page_not_found

# views.py
from django.http import HttpResponse

def page_not_found(request, exception):
    return HttpResponse("找不到页面")

# settings.py
DEBUG = False
ALLOW_HOSTS = ['*']

 

我要评论

没有登录?请先登录后再评论

最新评论

暂无人评论,来抢个沙发吧!