Django入门九之 (Admin User Group Permission)

Admin

  User && Group && Permission 
  
 `INSTALLED_APPS`中添加了四个依赖的`app`,
 `django.contrib.auth`,
 `django.contrib.contenttypes`,
 `django.contrib.messages`
 `django.contrib.sessions`。
        
在模板上下文中添加以下依赖
`django.contrib.auth.context_processors.auth`,
`django.contrib.messages.context_processors.messages`

在中间件中添加以下依赖,
django.contrib.auth.middleware.AuthenticationMiddleware,
django.contrib.messages.middleware.MessageMiddleware。

python manage.py createsuperuser创建一个超级用户,然后输入超级用户的用户名和密码。
在浏览器中输入`127.0.0.1:8000/admin/`进入`admin`登录界面。输入刚刚创建的用户名和密码,进入admin管理界面。
    
3. 自定义`admin`:

在admin.py中注册 admin.site.register(ArticleModel)//将自己的模型加入到admin后台

list_display:可以修改展示的列表项
search_field:可以提供搜索的查找项。
list_filter:可以提供一个过滤的表。

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('name','author')
    search_fields = ('title')
    list_filter = ('create_time')
    
#User
    导入模块
        from django.contrib.auth.models import User
        from django.contrib.auth import authenticate
        from django.contrib.auth import authenticate, login
        from django.contrib.auth import logout
        from django.contrib.auth.decorators import login_required
        from django.contrib.auth.models  import Group 
        
    创建:
        User.objects.create_user(username=username,password=password,email=meail)

    修改密码
        u = User.objects.get(username='john')
        u.set_password('new password')
        u.save()
    
    验证用户
        user = authenticate(username='john', password='secret')
        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中。否则,直接执行函数中的。    
        LOGIN_URL = '/backstage/admin_login/' //没有登录跳转到这个url下
        nexturl = requests.GET.get('next') //获取需要跳转的url
        if nexturl:
            return redirect(nexturl) //跳转到登录后的url
            
 * `user_passes_test`装饰器:
    
        from django.contrib.auth.decorators import user_passes_test

        def email_check(user):
            return user.email.endswith('@example.com')
        
        @user_passes_test(email_check)
        def my_view(request):
            ...
        
        可以用来判断当前用户是否满足某种要求们如果没有满足,则会跳转到`settings.LOGIN_URL`.
    * `permission_required`装饰器:传一个权限名称,如果这个用户有这个权限,则正常执行view函数,否则将跳转到`settings.LOGIN_URL`定义好的`url`去。
      
        from django.contrib.auth.decorators import permission_required

        @permission_required('polls.can_vote')
        def my_view(request):
            ...
      

`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`权限模型:
        class Task(models.Model):
            class Meta:
                permissions = (
                    ("view_task", "Can see available tasks"),
                    ("change_task_status", "Can change the status of tasks"),
                    ("close_task", "Can remove a task by setting its status as closed"),
                )
    * 在代码中添加权限:
       
        from myapp.models import BlogPost
        from django.contrib.auth.models import Permission
        from django.contrib.contenttypes.models import ContentType
        
        content_type = ContentType.objects.get_for_model(BlogPost)
        permission = Permission.objects.create(
            codename='can_publish', //唯一标识
            name='Can Publish Posts', //展示性
            content_type=content_type, //代表给哪一个app下的model定义权限
        )
      
    * 用户的权限操作:
       
        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`操作:

        ```python
        group.permissions.set([permission_list])
        group.permissions.add(permission, permission, ...)
        group.permissions.remove(permission, permission, ...)
        group.permissions.clear()
        ```

#Permission 例子:
      content_type = ContentType.objects.get_for_model(UserModel)
     permission = Permission.objects.create(
            codename='test',
            name='test1',
            content_type=content_type,
        )
     permission.save()
     return HttpResponse('sucsss')
     
     persionn = permission.objects.filter(codename='name').first()
      user =  User.objects.filter(username='root').first()
      user.user_permissions.add(persionn)

#Group 例子:
    user =  User.objects.filter(username='root').first()
    group =  Group.objects.create(name='manager')
    group.save()
    Per = Permission.objects.filter(codename="delete_article1").first()
    group.permission.add(Per)
    group.user_set.add(user)
    return HttpResponse('ok')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章