django路由views.py详解_Django学习笔记(五)-python3
1. http请求产生的对象
2.HttpRequest
a. 表单提交
1. method=get 表单提交
附:需要表单验证 -{% csrf_token %}
上图:静态页面
上图:views.py 方法接收传递值
1. method=post 表单提交
附:需要表单验证 -{% csrf_token %}
上图:页面form表单以post方式提交
上图:处理form表单post方式提交的值
常见参数:
HttpRequest代表一个来自uesr-agent的HTTP请求。
大多重要的请求信息都是作为HttpRequest 对象的属性出现(see Table H-1). 除了session外,其他所有属性都是只读的。
path
请求页面的全路径,不包括域名—例如, "/music/bands/the_beatles/"。
method
请求中使用的HTTP方法的字符串表示。全大写表示。例如:
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
GET
包含所有HTTP GET参数的类字典对象。参见QueryDict 文档。
POST
包含所有HTTP POST参数的类字典对象。参见QueryDict 文档。
服务器收到空的POST请求的情况也是有可能发生的。也就是说,表单form通过HTTP POST方法提交请求,但是表单中可以没有数据。因此,不能使用语句if request.POST来判断是否使用HTTP POST方法;应该使用if request.method == "POST" (参见本表的method属性)。
注意: POST不包括file-upload信息。参见FILES属性。
COOKIES
包含所有cookies的标准Python字典对象。Keys和values都是字符串。参见第12章,有关于cookies更详细的讲解。
FILES
包含所有上传文件的类字典对象。FILES中的每个Key都是标签中name属性的值. FILES中的每个value 同时也是一个标准python字典对象,包含下面三个Keys:
filename: 上传文件名,用Python字符串表示
content-type: 上传文件的Content type
content: 上传文件的原始内容
注意:只有在请求方法是POST,并且请求页面中有enctype="multipart/form-data"属性时FILES才拥有数据。否则,FILES 是一个空字典。
META
包含所有可用HTTP头部信息的字典。 例如:
CONTENT_LENGTH
CONTENT_TYPE
QUERY_STRING: 未解析的原始查询字符串
REMOTE_ADDR: 客户端IP地址
REMOTE_HOST: 客户端主机名
SERVER_NAME: 服务器主机名
SERVER_PORT: 服务器端口
META 中这些头加上前缀HTTP_最为Key, 例如:
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_HOST: 客户发送的HTTP主机头信息
HTTP_REFERER: referring页
HTTP_USER_AGENT: 客户端的user-agent字符串
HTTP_X_BENDER: X-Bender头信息
user
是一个django.contrib.auth.models.User 对象,代表当前登录的用户。如果访问用户当前没有登录,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以通过user的is_authenticated()方法来辨别用户是否登录:
if request.user.is_authenticated():
# Do something for logged-in users.
else:
# Do something for anonymous users.
只有激活Django中的AuthenticationMiddleware时该属性才可用
关于认证和用户的更详细讲解,参见第12章。
session
唯一可读写的属性,代表当前会话的字典对象。只有激活Django中的session支持时该属性才可用。 参见第12章。
raw_post_data
原始HTTP POST数据,未解析过。 高级处理时会有用处。
原文出自:http://blog.csdn.net/liu_yanna/article/details/50174851
3.HttpRespons
1. 页面访问传值的方式:
a. django默认传值render(request对象,views页面,{'key':value})
需导入:fromdjango.shortcutsimportrender
如图:
举例:
deftest(request):
key = request.POST.get('key')
returnrender(request,'index.html',{'key':key})
b. django传值template 传值
需导入:fromdjango.templateimportloader
fromdjango.httpimportHttpRequest, HttpResponse
如图:
举例:
defblog(request, a):
users = User.objects.all()
view = loader.get_template('index.html')
c = {'users':users}
returnHttpResponse(view.render(c,request),
content_type="text/html")
。c. django传值 render_to_response(views页面,{'key':value})
需导入:fromdjango.shortcutsimportrender_to_response
如图:
举例:
defblog(request, a):
print(a)
users = User.objects.all()
returnrender_to_response('index.html', {'users': users})
。d. django方法跳转redirect(views页面,{'key':value})
需导入:fromdjango.shortcutsimportrender,redirect
如图:
举例:
defblog(request, a):
print(a)
users= User.objects.all()
returnredirect('/index/12/sadsa')
defindex(request, id, key):
print(id)
print(key)
returnrender(request,'index.html')
。e. django页面传值快捷函数render_to_response('index.html',locals())
如图:
注释:locals()这个函数表示将方法blog模块里面所有的变量