HttpRequest
对象服务器接收到http
协议的请求后,会根据报文创建HttpRequest
对象视图函数的第一个参数是HttpRequest
对象在django.http
模块中定义了HttpRequest
对象的API
属性:
path:一个字符串,表示请求的页面的完整路径,不包含域名
method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'
encoding:一个字符串,表示提交的数据的编码方式
如果为None则表示使用浏览器的默认设置,一般为utf-8
这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值
GET:一个类似于字典的对象,包含get请求方式的所有参数
POST:一个类似于字典的对象,包含post请求方式的所有参数
FILES:一个类似于字典的对象,包含所有的上传文件
COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串
session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见“状态保持”
方法:
is_ajax():如果请求是通过XMLHttpRequest发起的,则返回True
QueryDict
对象request
对象的属性GET、POST都是QueryDict
类型的对象
与python
字典不同,QueryDict
类型的对象用来处理同一个键带有多个值的情况
方法get():根据键获取值
只能获取键的一个值
如果一个键同时拥有多个值,获取最后一个值
方法getlist():根据键获取值
将键的值以列表返回,可以获取一个键的多个值
dict.get('键',default) 或简写为 dict['键']
dict.getlist('键',default)
GET
属性POST
属性HttpResponse
对象在django.http
模块中定义了HttpResponse
对象的API
属性:
content:表示返回的内容,字符串类型
charset:表示response采用的编码字符集,字符串类型
status_code:响应的HTTP响应状态码
方法:
init :使用页内容实例化HttpResponse对象
write(content):以文件的方式写
flush():以文件的方式输出缓存区
set_cookie(key, value='', max_age=None, expires=None):设置Cookie
key、value都是字符串类型
max_age是一个整数,表示在指定秒数后过期
expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSerializer时才可序列化
max_age与expires二选一
如果不指定过期时间,则关闭浏览器就失效.
delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生
# ts11/views.py
def ckTest(request):
response = HttpResponse('设置/获取/删除cookie')
# response.set_cookie('a','123') 在响应里面设置
cookie = request.COOKIES # 在请求里面 获取cookie
a = cookie.get('a',None)
response.write(a)
# rs.delete_cookie('a')
# return rs
return response
# 注意:设置cookie值以及删除cookie值都是response对象的操作,
# 而获取cookie是从requeset相应中获得的.
HttpResponse
的子类JsonResponse
:返回json
数据,
JSON
编码的响应data
是字典对象JsonResponse
的默认Content-Type
为application/json
from django.http import JsonResponse
def jpTest(request):
return JsonResponse({'xx':'12345'})
render
: 模板渲染
redirect
:重定向,服务器端跳转,结合reverse方法使用。
session
在settings.py
文件中
项INSTALLED_APPS列表中添加:
'django.contrib.sessions',
项MIDDLEWARE_CLASSES列表中添加:
'django.contrib.sessions.middleware.SessionMiddleware',
session
#------------view.py--------------
from django.shortcuts import render,reverse,redirect
from django.http import HttpResponse
def home(request):
username = request.session.get('username','未登录')
return render(request,'home.html',
{'username':username})
def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
username = request.POST.get('username')
request.session['username']=username
return redirect(reverse('ts11_home'))
def logout(request):
# request.session['username'] = None
# del request.session['username']
# request.session.clear()
request.session.flush()
return redirect(reverse('ts11_home'))
#--------urls.py--------------
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^home/$',views.home,name='ts11_home'),
url(r'^login/$',views.login,name='ts11_login'),
url(r'^logout/$',views.logout,name='ts11_logout'),
]
#--------home.html---------
你好!{{ username }}
<a href={% url 'ts11_login' %}>登录a>
<a href={% url 'ts11_logout' %}>退出a>
#-------login.html--------
#------------view.py--------------
def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
username = request.POST.get('username')
request.session['username']=username
request.session.set_expiry(0) #关闭浏览器就过期
return redirect(reverse('ts11_home'))
setting
文件中的配置:
# 是否关闭浏览器使得Session过期,默认是False
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
#是否每次请求都保存Session,默认修改之后才保存
SESSION_SAVE_EVERY_REQUEST = False
# Session的cookie失效日期,默认是2周
SESSION_COOKIE_AGE = 1209600