Session
对于敏感、重要的信息不能存在浏览器,也就不能使用cookie,如用户名、余额、等级、验证码等
信息 如何确保数据的安全性呢,那就是将数据保存在服务端。这就利用到session技术。
Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间
跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求
来自应用程序的 Web页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当
会话过期或被放弃后,服务器将终止该会话。
Session介绍
django项目默认启用Session: settings.py文件,在项MIDDLEWARE_CLASSES中启用Session中间件
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','urldemo.apps.UrldemoConfig',# 手动注册子应用'viewdemo.apps.ViewdemoConfig'
]
Session依赖于Cookie
所有请求者(三个不同用户)的Session都会存储在服务器中,启用Session后,会在Cookie中存储一个
sessionid,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到sessionid后,会根据这个
值找出这个请求者的Session。 所以如果想要使用session,浏览器必须支持cookie,一般浏览器都会开
启cookie,除非是人为关闭
Session操作
def set_session(request):"""视图函数 ,测试session"""# 如name age gender higet 都是 从前端用户通过表单传过来的信息name = request.GET.get('name')age = request.GET.get('age')gender = request.GET.get('gender')higet = request.GET.get('higet')request.session['name'] =name # 以键值对的方 式设置sessionrequest.session['age'] = agerequest.session['gender'] = genderrequest.session['higet'] = higetreturn HttpResponse("设置session成功")
path('set/session',set_session)
上面的代码完成后可以输入这个网址然后右击检查,然后再pycharm中的数据库中找到YmUzNTEwZjE5NWYzNDEzYzEyMGIwNTdkZjU5M2Y5NmVmZmIzYmYxNzp7Im5hbWUiOiJ4aWFvbWluZyIsImFnZSI6IjE4IiwiZ2VuZGVyIjoibmFuIiwiaGlnZXQiOiIxLjgzIn0=
最后在解码查看
http://127.0.0.1:8000/viewdemo/set/session?name=xiaoming&age=18&gender=nan&higet=1.83
获取Session的值
def get_session(request):username = request.session.get('username')password = request.session.get('password')print(username)print(password)return HttpResponse('获取到session的值')
path('get/session',get_session)
类视图
虽然一个视图处理用户的一个请求,但HTTP提供了多种请求方式(GET、POST、PUT等),用户
使用应用的某个功能时,该功能可能以任意一种方式发起请求,例如商品管理功能使用GET方式发起的
呈现商品列表的请求、使用POST方式发起的修改商品请求等。此时视图需要结合条件分支,对每种请
求方式分别进行处理。然而若所有请求方式的处理逻辑都定义在同一个视图中,视图很可能庞大且臃
肿。为了解决这一问题,Django设计了类视图
class Regist(views):def get(self,request):return HttpResponse('类视图,get请求')def post(self,request):return HttpResponse('类视图,post请求')
path('class/register/',Regist.as_views())
错误视图
Django内置处理HTTP错误的视图,主要错误及视图包括
404错误:page not found视图
500错误:server error视图
400错误:bad request视图
403错误:permission_denied视图
如果想要看到错误视图,而不是错误调试信息的需要设置setting.py配置文件的调试开关设置为False,ALLOWED_HOSTS允许所有主机访问。
404错误及视图
将请求地址进行url匹配后,没有找到匹配的正则表达式,则调用404视图,这个视图会调用404.html的模板 进行渲染
404视图默认情况下定在’django.views.defaults.page_not_found’
django 自带404模板
视图传递变量request_path给模板,是导致错误的URL
自定义错误模板: 在项目的templates目录下创建一个名字叫404.html的模板文件: 当发生404错误时,404 视图会调用templates中的模板文件而不再调用自带的模板