django 權限功能(根據不同的用戶,設置不同的顯示和訪問權限)


簡單的認證

@Login_required 裝飾器

判斷是否登陸,沒有就自動重定向某個地方

用法:(局限於裝飾函數)(如果要裝飾一個類,則不能,要使用method_decorator)

@login_required(login_url='users:login')
def index_fn(reuqest):
    return HttpResponse('大家都是大牛')

自動跳轉到login頁面

登陸后:

@method_decorator裝飾器

@method_decorator(login_required(login_url='users:login'),name='dispatch')
class Index(View):
    def get(self, request):
        return render(request, 'admin/index.html', context={'request': request})

用法基本一樣也就是一個是類視圖一個是函數視圖。

但是是否每一個都需要添加呢?不符合優秀程序員的做法(手動滑稽)因為實在是太丑了。

Minxin認證

LoginRequired Mixin

需要設定重定向的URL(有一點restful的風格)

class Index(LoginRequiredMixin,View):
    login_url = 'users:login'
    def get(self, request):
        return render(request, 'admin/index.html', context={'request': request})

聰明的看得出來了,是否每一次都添加login_url呢,這里顯然不是的,可以將login_url設置在Settings里面,我的Mixin會自動去settings里面尋找LOGIN_URL的參數。

 

?next=/admin/        可以自定義next 

@login_required(redirect_field_name='my_redirect_field') 這樣就可以代替next

自動幫我們添加一個查詢的參數在URL上面。

user_passes_test 

這個比較通用於函數視圖

以下為官方文檔。 描述為判斷登陸的用戶的郵箱以‘@example.com’結尾,就為True,允許訪問,如果相反,那么就禁止訪問。可自定義

userPassesTestMixin

這個通用於類視圖。

class Index(UserPassesTestMixin,View):
    def test_func(self):
        return self.request.user.username.endswith('son')

    def get(self, request):
        return render(request, 'admin/index.html', context={'request': request})

test_func為Mixin所定的。測試是否通過,為TRUE則可以進入,FALSE為相反。

權限

permission_required decorator 

首先這里要注意權限和認證的區別,認證給你登陸了,但不一定給你看某些好看的東西。除非微信轉錢。

permission_required(perm.login_url=None,raise_exception=False)

perm為權限多個權限就可以用一個列表或者元組都行。放在函數視圖里面。

 perm 第一部分模型名字    第二部分為codename

permissionRequiredMixin mixin 

使用於類視圖里面。

lass TagManage(PermissionRequiredMixin,View):
    """
    create tags manage view
    route: admin/tags/int
    """
    permission_required = ('news.add_tag', 'news.view_tag')
    raise_exception = True # 403
    def get(self, request):

沒有權限直接403

 

未完待續。https://docs.djangoproject.com/en/3.0/topics/auth/default/

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM