Django的auth认证系统

用户对象的方法

authenticate() 验证用户名以及密码是否正确

user = authenticate(username='theuser',password='thepassword')

使用login(request, user_obj)之后,request.user就能拿到当前登录的用户对象

logout(request)

该函数接受一个HttpRequest对象,无返回值。 当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
用法:

from django.contrib.auth import logout	   
def logout_view(request):
	 logout(request)
	 return redirect("/login/")

is_authenticated() 用来判断当前请求是否通过了认证。

#案例
def login(request):
if request.method == "POST":
    username = request.POST.get("username")
    pwd = request.POST.get("password")
    # 如何判断用户名和密码对不对
    user = auth.authenticate(username=username, password=pwd)
    if user:
		#判断是否验证过
        ret = user.is_authenticated()
		print(ret)

        # 将登录的用户对象封装到request.user
        auth.login(request, user)
        return redirect("/index/")
return render(request, "login.html")

login_requierd()

auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验。
用法:
from django.contrib.auth.decorators import login_required
	  
@login_required
def my_view(request):
  ...
若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。
LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由

create_user()

auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。
用法:

from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)

create_superuser()

auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)等。
用法:

from django.contrib.auth.models import User
user_obj = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
	
#check_password(raw_password)
auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。
密码正确返回True,否则返回False。
用法:

ok = user_obj.check_password('密码')

set_password(raw_password)

auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。
注意:设置完一定要调用用户对象的save方法!!!

用法:

user_obj.set_password('新密码')
user_obj.save()

修改密码案例

@login_required
def set_password(request):
	user = request.user
	err_msg = ''
	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:
				err_msg = '新密码不能为空'
			elif new_password != repeat_password:
				err_msg = '两次密码不一致'
			else:
				user.set_password(new_password)
				user.save()
				return redirect("/login/")
		else:
			err_msg = '原密码输入错误'
	content = {
		'err_msg': err_msg,
	}
	return render(request, 'set_password.html', content)

用户对象的属性

user_obj能够拿到认证所用用户表的数据属性,比如username, password等。
其他常用属性含义如下:

is_staff : 用户是否拥有网站的管理权限.
is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。

拓展默认的auth-user表

#新建表
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
	"""
	用户信息表
	"""
	nid = models.AutoField(primary_key=True)
	phone = models.CharField(max_length=11, null=True, unique=True)
	
	def __str__(self):
		return self.username
		
settings修改
# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

创建普通用户:
UserInfo.objects.create_user(username='用户名', password='密码')

创建超级用户:
UserInfo.objects.create_superuser(username='用户名', password='密码')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值