django는 URL을 통해 간단한 권한 제어를 실현합니다

2590 단어
사용자 권한에 따라 사용자가 어떤 페이지를 방문할 수 있는지 설정하고django로 간단한 데모를 실현합니다.
1.models.py 파일
class level(models.Model):
    l_name = models.CharField(max_length=50,verbose_name="    ")
    l_permission = models.OneToOneField("permission")
    def __str__(self):
        return self.l_name


class userinfo(models.Model):
    u_name = models.CharField(max_length=50,verbose_name="    ")
    u_user = models.OneToOneField(User)
    u_level = models.ForeignKey(level,related_name="lev")

    def __str__(self):
        return self.u_name


class permission(models.Model):
    p_name = models.CharField(max_length=50,verbose_name="    ")
    p_menu = models.ManyToManyField("menu")

    def __str__(self):
        return self.p_name

class menu(models.Model):
    m_name = models.CharField(max_length=50,verbose_name="    ")
    m_url = models.CharField(max_length=50,verbose_name="    ",blank=True,null=True)
    def __str__(self):
        return self.m_name

class nickname(models.Model):
    n_nickname = models.CharField(max_length=50,verbose_name="  ",blank=True,null=True)
    n_user = models.ForeignKey(userinfo,blank=True,null=True,related_name="nick")

    def __str__(self):
        return self.n_nickname

사용자 및 역할의 관계, 액세스 가능한 라우트를 설정합니다.
2.settings.py 파일
URL_WHITE_LIST = ['index', 'login', 'logout']

루트 화이트 리스트를 설정합니다.
3.views.py 파일
def url_check(fun):
    def check(request,*args,**kwargs):
        if request.session.get("p_l",None):
            require_list = pickle.loads(request.session.get("p_l"))
            request_url = request.path.replace("/","")
            ua = request.META.get('HTTP_USER_AGENT',None)
            if request_url in require_list or request_url in IP_WHITE_LIST:
                return fun(request,*args,**kwargs)
            else:
                error_msg = "    !"
                menu_ = pickle.loads(request.session.get("p_l"))
                return render(request,"index.html",{"error_msg":error_msg,"menu":menu_})
        else:
            return HttpResponseRedirect(reverse("login"))
    return check

사용자가 로그인했을 때의session 정보에 따라 사용자 역할이 접근할 수 있는 루트를 가져옵니다. 현재 방문한 주소가 백명단이나session 기록에 없으면 오류 정보를 되돌려줍니다.
@url_check
def menu(request,menuname):
    return HttpResponse("

%s

"%menuname)

이후의 방법에 이 클립을 추가하면 간편한 루트 제어를 실현할 수 있다.

좋은 웹페이지 즐겨찾기