zoukankan      html  css  js  c++  java
  • Django学习笔记之auth系统

    User用户

    创建用户:
    from django.contrib.auth.models import User
    User.objects.create_user(username=username,password=password,email=email)
    验证用户:
    from django.contrib.auth import authenticate
    user = authenticate(username=username,password=password)
    if user is not None:
        # 这个用户存在数据库中
    else:
        # 这个用户没有存在这个数据库中
    登录
    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:
            if user.is_active:
                login(request, user)
                # 登录成功
            else:
                # 用户没有被激活,不能登录
        else:
            # 用户名或者密码错误
    注销
    from django.contrib.auth import logout
    
      def logout_view(request):
          logout(request)
          # 注销这个用户。他的session信息将被清除掉。

    login_required装饰器

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
        ...

    如果没有登录成功,会跳转到settings.LOGIN_URL指定的URL中。否则,直接执行函数中的内容。

    User模型常用属性和方法
    • username:用户名。
    • email:邮箱。
    • groups:多对多的组。
    • user_permissions:多对多的用户权限。
    • is_staff: 是否是admin的管理员。
    • is_active: 是否激活,判断该用户是否可用。
    • is_superuser: 是否是超级用户。
    • last_login: 上次登录时间。
    • date_joined: 注册时间。
    • is_authenticated: 是否验证通过了。
    • is_anonymous:是否是匿名用户。
    • set_password(raw_password): 设置密码,传原生密码进去。
    • check_password(raw_password): 检查密码。
    • has_perm(perm): 判断用户是否有某个权限。
    • has_perms(perm_list): 判断用户是否有权限列表中的某个列表

    Permission权限模型

    在模型中添加权限
    from django.db import models
    
    class BlogModel(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=100,blank=True)
        content = models.TextField()
    
        class Meta:
            permissions = (
                ('watch_article', u'查看文章的权限'),
                ('update_article', u'修改文章的权限'),
                ('delete_article', u'删除文章的权限'),
                ('add_article', u'发布文章的权限'),
            )
    在代码中添加权限
    from django.contrib.auth.models import Permission
    from django.contrib.contenttypes.models import ContentType
    def test(request):
        content_type = ContentType.objects.get_for_model(BlogModel)
        permission = Permission.objects.create(
            codename='can_publish',
            name='Can Publish BlogMoModel',
            content_type=content_type,
        )
        permission.save()
        return HttpResponse('success')
    用户权限操作
    myuser.user_permissions.set([permission_list])
    myuser.user_permissions.add(permission, permission, ...)
    myuser.user_permissions.remove(permission, permission, ...)
    myuser.user_permissions.clear()
    myuser.has_perm('foo.add_bar')

    访问权限的方式:appname+.+权限名称

    Group模型

    • 所属包django.contrib.auth.models.Group
    • 创建Group:必须传一个name参数进去。
    • Group操作:
    group.permissions.set([permission_list])
    group.permissions.add(permission, permission, ...)
    group.permissions.remove(permission, permission, ...)
    group.permissions.clear()
  • 相关阅读:
    [模板]RMQ(冲刺准备中)
    洛谷 P2569[SCOI2010]股票交易(动规+单调队列)
    洛谷 P3659 [USACO17FEB]Why Did the Cow Cross the Road I G
    粗略了解fill与fill_n
    计蒜客D2T2 蒜头君的排序(动态维护树状数组)
    洛谷 P3478 [POI2008]STA-Station
    洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network
    洛谷 P3112 [USACO14DEC]后卫马克Guard Mark
    洛谷 P3092 [USACO13NOV]没有找零No Change
    洛谷 P2850 [USACO06DEC]虫洞Wormholes 判负环
  • 原文地址:https://www.cnblogs.com/shuai06/p/12397513.html
Copyright © 2011-2022 走看看