状态保持
一、cookie
cookie是存在浏览里面的,当浏览器携带cookie访问服务器的时候,服务端就会识别出是谁
查看cookie
现在新建一个视图来设置cookie
def set_cookie(request): #设置cookie response = HttpResponse('设置cookie') # response.set_cookie('name','chancey',expires=datetime.datetime(2019,1,15)) #指定日期过期 # response.set_cookie('name','chancey',max_age=20) #指定一段时间过期,20秒后 response.set_cookie('name','chancey') #不做任何设置的话默认关闭浏览器过期 return response
二、session
session的原理
session是存储在服务器里面,服务端会有类似于字典的存储空间,键值为sessionid和userinfo
当浏览器访问的时候,服务器给其sessionid,然后浏览器将sessionid保存在cookie里面,再次访问的时候就能识别出来
写个视图
def index(request): username = request.session.get('username','未登录') print(username) return render(request,'status/index.html',context={'username':username}) class Login(View): def get(self,request): return render(request,'status/login.html') def post(self,request): username = request.POST.get('username') print(username) request.session['username'] = username #设置session,其实就是给字典传值 return redirect(reverse('index'))
url
path('index/',views.index,name='index'), path('login/',views.Login.as_view(),name='login'),

<html> <head> <title>主页</title> </head> <body> 欢迎你,{{ username }}!! </body> </html>

<html> <head> <title>登录</title> </head> <body> <form action="" method="post"> {% csrf_token %} <p><input type="text" name="username"/></p> <p><input type="submit" value="登录"/></p> </form> </body> </html>
查看效果
这里回到数据库看一眼
session时长
法一、在视图中设置
- set_expiry(value):设置会话的超时时间
- 如果没有指定,则两个星期后过期
- 如果value是一个整数,会话将在values秒没有活动后过期
- 若果value是一个imedelta对象,会话将在当前时间加上这个指定的日期/时间过期
- 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
- 如果value为None,那么会话永不过期
法二、在settings中设置
三、注册例子
视图
class Reg(View): def get(self,request): return render(request,'status/reg.html') def post(self,request): username = request.POST.get('user') passwd = request.POST.get('passwd') passwd_again = request.POST.get('passwd_again') if passwd == passwd_again: User.objects.create(user=username,passwd=passwd) return redirect(reverse('login')) else: return HttpResponse('密码不一致,重新注册')
模型
class User(models.Model): user = models.CharField(max_length=30,unique=True) passwd = models.CharField(max_length=100) def __str__(self): return 'User<user=%s,passwd=%s>'%(self.user,self.passwd)
url
path('reg/',views.Reg.as_view(),name='reg'),
四、登录的例子
视图
class Login(View): def get(self,request): return render(request,'status/login.html') def post(self,request): username = request.POST.get('username') passwd = request.POST.get('passwd') users = User.objects.filter(user=username) if users: if users.first().user == username and users.first().passwd == passwd: return redirect(reverse('index')) else: return HttpResponse('密码不正确') else: return HttpResponse('该用户不存在')
url
path('login/',views.Login.as_view(),name='login'),
效果
作者:ChanceySolo
出处:https://www.cnblogs.com/chancey/p/10268463.html
版权:本作品采用「ChanceySolo-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!