auth模块基础方法
2019-07-30 本文已影响0人
warmsirius
写在前面
这几天的项目用到了挺多auth模块的内容,今天来总结一下django中auth模块的一些基础的用法。
参考博客
auth模块的基础方法
- 导入模块
from django.contrib import auth
- 1、命令行创建超级用户或创建用户
python manage.py createsuperuser
python manage.py createuser
-
2、authenticate() 认证功能
- 验证用户名和密码(Django2也会验证is_active,可以添加配置只验证用户名和密码)
# 让authenticate不关联is_active
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
- 如果验证成功,得到的是一个用户对象
- 如果验证失败,得到的是None(任何属性都是空)
user = auth.authenticate(username=username, password=pwd)
-
3、login(HttpRequest, user)
- 该函数接受一个HttpRequest对象,以及一个经过认证的User对象。
- 该函数实现一个用户登录的功能。
- 它本质上会在后端为该用户生成相关session数据。
from django.contrib.auth import authenticate, login
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
# Redirect to a success page.
...
else:
# Return an 'invalid login' error message.
...
-
4、logout(request)
- 该函数接受一个HttpRequest对象,无返回值。
- 当调用该函数时,当前请求的session信息会全部清除。
- 注意: 该用户即使没有登录,使用该函数也不会报错。
from django.contrib.auth import logout
def logout_view(request):
logout(request)
# Redirect to a success page.
-
5、is_authenticated()
- 用来判断当前用户是否通过了认证
def my_view(request):
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
-
6、login_requierd()
- auth 给我们提供的一个装饰器工具,用来快捷的给某个FBV视图添加登录校验
- 也可以给CBV视图添加登录校验
注意:
- 若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
- 如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。 LOGIN_URL = '/login/' # 这里配置成你项目登录页面的路由
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class Home(views.View):
@method_decorator(login_required)
def get(self, request):
return render(request, 'home.html')
-
7、create_user()
- auth 提供的一个创建新用户的方法,针对auth中的User数据模型,或者是需要提供必要参数(username、password)等。
- 注意: 在使用create_user()的时候,auth模块会默认将收到的明文密码加密存储进数据库。
from django.contrib.auth.models import User
user = User.objects.create_user(username = '用户名', password = '密码', email = '邮箱', ...)
# create_superuser() # 创建超级用户
-
8、check_password(input_password, user.password)
- auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。密码正确返回True,否则返回False。
- 该方法会自动将收取到的明文密码加密,不需要其他设置。
from django.contrib.auth.hashers import check_password
user = User.objects.get(username=username)
pwd = user.password
print(user)
# 第一个参数为明文密码,第二个参数为加密后的密
if check_password(password, pwd):
# 用户名密码正确
pass
-
9、set_password(password)
- auth 提供的一个修改密码的方法,针对某个用户对象的方法,接收 要设置的新密码 作为参数。
- 注意: 设置完一定要调用用户对象的save方法
user.set_password(password='')
user.save()