Django-views,用户认证,login_requierd()
2024-08-29 19:27:27
分别是认证,登入,注销的功能
authenticated():验证是否登录
user = authenticate(username='someone',password='somepassword')
login():登入,并且创建cookie,session
login(request, user)
logout():注销,清除session
logout(request,)
user对象方法
user对象的is_authenticated()方法
def my_view(request):
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
创建用户方法
from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')
修改密码
user = User.objects.get(username='')
user.set_password(password='')
user.save
示例一:修改密码
@login_required
def set_password(request):
user = request.user
state = None
if request.method == 'POST':
old_password = request.POST.get('old_password', '')
new_password = request.POST.get('new_password', '')
repeat_password = request.POST.get('repeat_password', '')
if user.check_password(old_password):
if not new_password:
state = 'empty'
elif new_password != repeat_password:
state = 'repeat_error'
else:
user.set_password(new_password)
user.save()
return redirect("/log_in/")
else:
state = 'password_error'
content = {
'user': user,
'state': state,
}
return render(request, 'book/set_password.html', content)
示例二:ajax提交登录并验证
def log_in(request): if request.is_ajax():
username=request.POST.get("username")
password=request.POST.get("password")
valid_code=request.POST.get("valid_code") ajax_response={"user":None,"errors":""} if valid_code.upper()==request.session.get("valid_code").upper():
user=authenticate(username=username,password=password) # 用户验证 if user:
login(request,user) # 执行后,相当于设定了cookie和session
ajax_response["user"]=user.username
else:
ajax_response["errors"]="用户名或者密码错误" else:
ajax_response["errors"]="验证码错误" return HttpResponse(json.dumps(ajax_response)) return render(request,"login.html")
django也为我们设计好了一个用于此种情况的装饰器:login_requierd(),实现跟is_authenticated()同样功能
from django.contrib.auth.decorators import login_required @login_required
def my_view(request):
...
若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' (这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递 当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
最新文章
- 通过监控线程状态来保证socket服务器的稳定运行
- css设置height 100%
- Stanford机器学习---第九讲. 聚类
- 车辆管理系统之搭建框架 添加必要的数据 安装svn(二)
- JAVA GUI学习 - JPopupMenu鼠标右键菜单组件学习
- VS2010/MFC设置对话框控件的Tab顺序
- 文件描述符和exec() close_on_exec
- Android SQLite 加密模块实现入门
- p1221网络布线(最小生成树 Prim(普里母)算法) p1222 Watering Hole
- python识别验证码——PIL,pytesser,pytesseract的安装
- ●UVa 11346 Probability
- console对象探究
- 关闭 synactive guixt. 在sap gui的右上角一个标志里,将 active guixt 选项去掉即可。
- 使用PROC TRANSPOSE过程步对数据集进行转置时如何保持日期变量的时间顺序
- 初学JDBC的一些总结(一)
- JSON的一些小结
- 冲刺博客NO.8
- MongoDB 创建索引及其他
- hive 创建orc表
- c#随机生成中文姓名