加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django 从零开始 8 用户登录验证 待测

发布时间:2020-12-20 12:45:15 所属栏目:Python 来源:网络整理
导读:看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 ? 特别是? from django.contrib.auth import authenticate 都说这个方法是,不过貌似文档中说的是使用django自带的模型可以对用户登录

看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理

?

特别是?

from django.contrib.auth import authenticate

都说这个方法是,不过貌似文档中说的是使用django自带的模型可以对用户登录做一个验证,

但是业务需求不需要,不可能使用django的user模型? 通常都是自定义

?

所以自定义一个用户模型

class User(models.Model):
    class Meta:
        db_table = user

    username = models.CharField(max_length=20,null=True,unique=True)
    password = models.CharField(max_length=128)
    create_date = models.DateTimeField(auto_now_add=True)

有usernam和password两个属性

同时在sessting中指定用户登录验证模型是哪一个,不指定则会使用django默认的用户登录验证表去进行一个验证...? 没有在这个模型存入,玩个锤子验证哦

AUTH_USER_MODEL = user.User  #app名字.表名字

不过 貌似django也自带一个session会话保存数据库表...

只要进行了登录验证 也会保存在django_session表中,貌似可以在settings中可以关掉,但是不会到过期时间自动清除(默认30天),而是一直保存在表中

from django.contrib.auth import authenticate,login
def login_auth(request):

    # 如果用户登录还想再次访问login,验证cookes中含有is_login字段则将返回index页面
    if request.COOKIES.get(is_login):
        return redirect(reverse(user:index))


    if request.POST.method == POST:
        # 在前端页面自己写一个loginform登录框
        username = request.POST.get(username)
        password=  request.POST.get(password)

        # 会往指定模型中寻找含有该字段的数据数据,如果存在该实例 继续往下
        user = authenticate(username=username,password=password)
        if user:
            # from django.contrib.auth.decorators import login_required
            # 看源码可知 将查询到的用户实例的 pk (id) 加入session中 使用login_required 来判断是否为登录用户
            # 还可以使用 request.user.is_authenticated 查看登录用户其他属性
            login(request,user)

            # 防止登录用户进入
            request.COOKIES[is_login] = True

            # 得到cookies之前进行跳转登录前的页面
            next = request.COOKIES.get(next)

            if next:
                return redirect(reverse(next))

            return redirect(reverse(user:index))

    return render(request,user/login.html)

?

其中源码还对request.user 进行了一个属性设置 可以用request.user.is_authenticated 对其该用户验证为登录用户,html模板中也能使用???

?

?

退出使用logout

from django.contrib.auth import logout

def logout(request):
    logout(request)
    return redirect(reverse("user:index"))

?

对用户登录视图验证

from django.contrib.auth.decorators import login_required
@login_required
def xxx():
    pass

?

?

?

?

?

如果不想这种办法也不想将session保存在数据库中,将login替换

?

可以将用户一些不太重要的数据以字符串字典

request.COOKES[‘user‘]="user_id:%s" user.id

保存在cookies中(用户名或者id主键),?使用可逆推加密算法进行一个加密

?

如果用户请求,进行一个解密,如果含有user字段,并该字段中含有user_id

user = request.COOKES.get(user)
if user:
    # 进行你的解密得到记过 user的values值
  ...
if user_id‘ in values: # 确定是登陆用户 请继续往下操作 else: ....

?

?

?

引用?https://www.cnblogs.com/guoguojj/p/8607951.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读