CRM系統

CRM系統html

1.創建兩個app:1.rbac:權限組件。。。2.web:銷售管理系統web

 Tool --> Run manage.py Task...正則表達式

輸入 ,創建rbac和web 兩個appdjango

// message 是工程名
startapp message 

 

創建表session

from django.db import models
class Permission(models.Model):
    """
    權限表
    """
    title = models.CharField(verbose_name='標題',max_length=32)
    url = models.CharField(verbose_name='含正則的URL',max_length=128)

    def __str__(self):
        return self.title

class Role(models.Model):
    """
    角色表
    """
    title = models.CharField(verbose_name='角色名稱',max_length=32)
    permissions = models.ManyToManyField(verbose_name='擁有的全部權限',to='Permission',blank=True)

    def __str__(self):
        return self.title

class UserInfo(models.Model):
    """
    用戶表
    """
    name = models.CharField(verbose_name='用戶名',max_length=32)
    password = models.CharField(verbose_name='密碼',max_length=64)
    email = models.CharField(verbose_name='郵箱',max_length=32)
    roles = models.ManyToManyField(verbose_name='擁有的全部角色',to='Role',blank=True)

 

2.錄入信息:app

  • 客戶管理
    • 客戶列表:/customer/list/
    • 添加客戶:/customer/add/
    • 刪除客戶:/customer/list/(?P<cid>\d+)/
    • 修改客戶:/customer/edit/(?P<cid>\d+)/
    • 批量導入:/customer/import/
    • 下載模板:/customer/tpl/
  • 帳單管理
    • 帳單列表:/payment/list/
    • 添加帳單:/payment/add/
    • 刪除帳單:/payment/del/(?P<pid>\d+)/
    • 修改帳單:/payment/edit/<?P<pid>\d+/ 

接下來的思路是:url

任何用戶均可以訪問登錄頁面,用戶第一次登錄時,通過中間件、視圖函數、CRM、數據庫訪問檢測該用戶,之後往回走,返回給用戶,途中把用戶信息存放在session中,之後若是用戶再訪問網頁時,再登錄時會通過中間件,這時能夠訪問session來判斷該用戶以前是否訪問過,這樣就不用每次都訪問數據庫,從而減輕數據庫的壓力。spa

 

 

//account.py

from django.shortcuts import HttpResponse,render,redirect
from rbac import models


def login(request):
    if request.method == 'GET':
        return render(request,'login.html')

    user = request.POST.get('user')
    pwd = request.POST.get('pwd')

    obj = models.UserInfo.objects.filter(name=user,password=pwd).first()

    if not obj:
        return render(request,'login.html',{"msg":"輸入的用戶名和密碼錯誤"})

    permission_queryset = obj.role.filter(permission__isnull=False).values("permission__id","permission__url").distinct()

    permission_list = [item['permission__url'] for item in permission_queryset]

    request.session['luffy_permission_url_list_key'] = permission_list

    return redirect('/customer/login/')

 

這個目的是當用戶提交帳號密碼時,會將成功的帳號密碼存入到session裏面code

 

#########################################################orm

編寫中間件

當你不知道這個中間件繼承哪一個父類時,能夠在settings -> MIDDLEWARE  結果是:MiddlewareMixin

from django.shortcuts import HttpResponse
from django.utils.deprecation import MiddlewareMixin


class middle_test(MiddlewareMixin):
    def process_request(self, request):
        '''
        1.獲取當前用戶請求的URL
        2.獲取當前用戶在session中保存的權限列表['/customer/list/',......]
        3.權限信息匹配
        :param request:
        :return:
        '''

        current_url = request.path_info
        permission_list = request.session.get('luffy_permission_url_list_key')

        if not permission_list:
            return HttpResponse('未登錄')

        print(current_url)
        print(permission_list)

輸出:

/customer/list/   ---->  current_url  獲取了用戶請求的url


['/customer/list/', '/customer/add/', '/customer/list/(?P<cid>\\d+)/', '/customer/edit/(?P<cid>\\d+)/', '/customer/import/', '/customer/tpl/', '/payment/list/', '/payment/add/', '/payment/del/(?P<pid>\\d+)/', '/payment/edit/<?P<pid>\\d+/']

               ------------------->>> 獲取了用戶保存在session中的數據

 

更新白名單的內容:

class middle_test(MiddlewareMixin):
    def process_request(self, request):
        '''
        1.獲取當前用戶請求的URL
        2.獲取當前用戶在session中保存的權限列表['/customer/list/',......]
        3.權限信息匹配
        :param request:
        :return:
        '''

        # 設置白名單,當用戶訪問時,能夠使得各個用戶均可以訪問,無需任何權限
        vaild_list = [
            '/login/',
            '/admin/*',
        ]

        current_url = request.path_info                 # 獲取用戶請求的URL
        permission_list = request.session.get('luffy_permission_url_list_key')    # 獲取用戶在session中存在的權限列表
        for vaild_url in vaild_list:
            if re.match(vaild_url,current_url):               # 先循環白名單
                return None

        if not permission_list:                     # 若是沒有在session中,判斷你是沒有登錄的用戶
            return HttpResponse('你尚未登錄 ')

        flag = False          # 設置flag,當匹配成功後就沒有須要繼續往下匹配

        for url in permission_list:
            reg = "^%s$" % url                              # 經過正則表達式,實現徹底的匹配
            if re.match(reg,current_url):
                flag = True
                break
        if not flag:
            return HttpResponse('你沒有權限未登錄')

 

權限分配知識點:

  -- 保留URl中的原搜索條件    memory request

  -- 模板中整形轉換字符串    1|safe

  -- ModelForm定製radio

  -- ModelForm顯示默認值

  -- ModelForm save 以前對其instance 進行修改

  -- BootStrapModelForm基類

相關文章
相關標籤/搜索