auth扩展

#定义一个抽象模型类
from django.db import models class BaseModel(models.Model): '''模型抽象基类''' create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间') update_time = models.DateTimeField(auto_now=True,verbose_name='更新时间') is_delete = models.BooleanField(default=False,verbose_name='删除标记') class Meta: #说明是一个抽象模型类 abstract = True

  创建超级用户

		python manage.py createsuperuser
		
	from django.contrib import auth

	2. auth.authenticate(username=username, password=pwd)
	
		验证用户名和密码
		如果验证成功,得到的是一个用户对象
		如果验证失败,得到的是匿名用户
         但是Django2版本的authenticate验证失败得到的是None 不是匿名用户
         from django.contrib.auth.hashers import check_password
         check_password()
 3. auth.login(request, user) 将验证过的用户 赋值给 request.user属性 4. auth.logout(request) request.session.flush() 将session数据都删除,并且Cookie也失效 2. 如何扩展自带的auth_user表 1. 新建一个表, 一对一关联上面的auth_user表 2. 继承的方式 from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): phone = models.CharField(max_length=11) addr = models.CharField(max_length=128) 相当于对默认的auth_user表做了扩展, 并且代替auth_user 注意: 在settings.py中一定要加 AUTH_USER_MODEL = 'app名.类名'

  

   #Django2
   try: user = User.objects.get(username=username) pwd = user.password if user is not None and check_password(password,pwd): print('user===>', user) if user.is_active: # 用户已激活 # 记录用户的登录状态 login(request, user) # 跳转到首页 response = redirect(reverse('goods:index'))#HttpResponseRedirect #判读是否需要记录用户 remember = request.POST.get('remember') print('rememeber==',remember) if remember == 'on': #记住用户名 print('设置Cookie成功') response.set_cookie('username',username,max_age=7*24*2600) else: response.delete_cookie('username') #返回response return response else: # 用户未激活: return render(request, 'login.html', {'errmsg': '用户未激活'}) else: print(user) return render(request, 'login.html', {'errmsg': '用户名或密码错误'})

  

 

from django.db import models
from django.contrib.auth.models import AbstractUser
from db.base_model import BaseMode

class User(AbstractUser, BaseModel):
    '''用户模型类'''
    # def generate_active_token(self):
    #     '''生成用户签名字符串'''
    #     serializer = serializer(setting)
    class Meta:
        db_table = 'df_user'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

  

#auth模块user表字段
CREATE TABLE "auth_user" (
    "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 
    "password" varchar(128) NOT NULL, "last_login" datetime NULL, 
    "is_superuser" bool NOT NULL, 
    "first_name" varchar(30) NOT NULL, 
    "last_name" varchar(30) NOT NULL,
    "email" varchar(254) NOT NULL, 
    "is_staff" bool NOT NULL, 
    "is_active" bool NOT NULL,
    "date_joined" datetime NOT NULL,
    "username" varchar(30) NOT NULL UNIQUE
)

  

猜你喜欢

转载自www.cnblogs.com/pengsq/p/9715699.html
今日推荐