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

django 通過(guò)url實(shí)現(xiàn)簡(jiǎn)單的權(quán)限控制的例子

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

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

1.models.py 文件

class level(models.Model):
  l_name = models.CharField(max_length=50,verbose_name="等級(jí)名稱")
  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

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

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

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

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

相關(guān)文章

最新評(píng)論

新昌县| 交口县| 霍林郭勒市| 灵石县| 广宗县| 建德市| 铁岭市| 高台县| 乌恰县| 阿尔山市| 成都市| 仲巴县| 聂荣县| 皮山县| 保定市| 博乐市| 波密县| 弋阳县| 石台县| 迭部县| 文山县| 宜章县| 德兴市| 勐海县| 兴安盟| 墨玉县| 阿巴嘎旗| 开原市| 日土县| 金山区| 历史| 观塘区| 永嘉县| 彭山县| 泉州市| 沧州市| 陆良县| 台州市| 勐海县| 宁夏| 苍溪县|