最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django 通過url實現(xiàn)簡單的權(quán)限控制的例子

 更新時間:2019年08月16日 19:12:29   作者:喝完這杯還有一箱  
今天小編就為大家分享一篇django 通過url實現(xiàn)簡單的權(quán)限控制的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

根據(jù)用戶權(quán)限設(shè)定用戶可以訪問哪些頁面,用django實現(xiàn)一個簡單的demo。

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="權(quán)限名稱")
  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']

設(shè)置路由白名單。

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 = "沒有權(quán)限!"
        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

定義一個路由檢測的閉包方法,根據(jù)用戶登錄時的session信息,獲取該用戶角色可以訪問的路由,如果當前訪問的地址不在白名單或是session記錄里,返回錯誤信息。

@url_check
def menu(request,menuname):
  return HttpResponse("<h1>%s</h1>"%menuname)

在之后的方法上添加該閉包,即可實現(xiàn)簡易的路由控制。

以上這篇django 通過url實現(xiàn)簡單的權(quán)限控制的例子就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

大田县| 博湖县| 林周县| 全州县| 公安县| 三河市| 吴桥县| 壶关县| 体育| 扶风县| 平乡县| 安平县| 皮山县| 澳门| 万年县| 老河口市| 平顺县| 成都市| 天峨县| 罗山县| 土默特左旗| 清镇市| 福海县| 大同县| 绩溪县| 五家渠市| 乐安县| 辉县市| 天全县| 常熟市| 华容县| 林周县| 公主岭市| 扶余县| 永新县| 彭泽县| 资溪县| 乐平市| 鄂尔多斯市| 新化县| 永嘉县|