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