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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章