视图函数,接受Web请求并且返回Web响应(必须返回响应)
响应可以是一张网页的HTML内容,一个重定向,一个404错误
from django.shortcuts import render, HttpResponse,redirect
def current_datetime(request):
html = "<html><body>你好</body></html>"
return HttpResponse(html)
每个视图函数都需要接收请求和返回响应,使用HttpRequest对象作为第一个参数,
并且通常称之为request。每个视图函数都负责返回一个HttpResponse对象,其中包含生成的响应
Request对象
request属性:
django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest类中的属性
1. request.method 获取请求的方法
值为一个字符串,"GET"、"POST",必须使用大写
对请求方法进行判断if request.method=="POST":pass
2.request.GET 通常用来获取URL里面的参数
值为QueryDict对象,类似于字典,包含HTTP GET的所有参数
如:127.0.0.1:8000/edit_book/?id=1&name=jerd
request.GET --> {"id":1, "name":"jerd"}
request.GET.get("id") #1
3.request.POST 用来获取POST提交过来的数据
1.POST请求可以带有空的POST字典,如果通过POST发送一个表单,但是表单中没有任何的数据,
QueryDict 对象依然会被创建。
2.如果使用POST上传文件的话,文件信息将包含在FILES属性中
request.FIlES.get('upload_file')
3.键值对的值是多个的时候,比如checkbox类型的input标签,select标签
需要用request.POST.getlist("hobby")
4.request.path_info
获取用户请求的路径(不包含IP和端口和URL参数)
在网页上输入http://127.0.0.1:8000/t_test/
print(request.path_info) 结果:/t_test/
5.request.get_full_path()
在网页上输入http://127.0.0.1:8000/t_test/
print(request.get_full_path()) 结果:/t_test/
在网页上输入http://127.0.0.1:8000/t_test/?page=5
print(request.get_full_path()) 结果:/t_test/?page=5
6.request.FILES
一个类似于字典的对象,包含所有的上传文件信息。
print(request.FILES) #{'upload_file': [<InMemoryUploadedFile: 0020033025290064_b.jpg (image/jpeg)>]}>
file_obj=request.FIlES.get('upload_file')
在使用form表单提交文件时,表单中必须带有enctype="multipart/form-data
否则FILES将为一个空的QueryDict
上传文件
![]()
'''
urls文件
from django.conf.urls import url
from app import views
url(r'^upload/', views.upload),
html文件
enctype必须要写 form中的input必须有name属性,且注意csrf阻拦
<form action="/upload/,method="post",enctype="multipart/form-data>
{% csrf_token %}
< input type = "file" name = "upload_file" >
< input type = "submit" value = "开始上传" >
</form>
views文件
from django.shortcuts import HttpResponse,render,redirect
def upload(request):
if request.method=="POST":
file为页面上type = files类型input的name属性值
print(request.FILES) #{'upload_file': [<InMemoryUploadedFile: 0020033025290064_b.jpg (image/jpeg)>]}>
file_obj=request.FIlES.get('upload_file')
filename=file_obj.name
with open(filename,"wb") as f:
# 从上传的文件对象中一点一点读
for chunk in request.FILES['file'].chunks():
f.write(chunk)
##从上传的文件对象中一行一行
for line in file_obj:
f.write(line)
return HttpResponse("上传成功")
return render(request,"upload.html")
'''
View Code