生活随笔
收集整理的這篇文章主要介紹了
django crm 03
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 今日內容:
- 通過中間件,給視圖函數 增加 登陸驗證,權限驗證功能
- ?? 給中間件設置白名單,登陸視圖函數不需要認證
- ?? 登陸之后,會把 用戶名和權限列表存儲在session中
- ?? 在中間件中完成 認證功能
from django.contrib import adminfrom app01 import models
# Register your models here.# 控制admin中的顯示方式
class PermissionAdmin(admin.ModelAdmin):list_display = [
'pk',
'title',
'url'] #告訴admin顯示列表的哪些字段ordering = [
'-pk'] #告訴admin 以什么方式排序class RoleAdmin(admin.ModelAdmin):list_display = [
'pk',
'title']admin.site.register(models.User)
admin.site.register(models.Role, RoleAdmin) #告訴admin以上面指定的方式展示列表
admin.site.register(models.Permission,PermissionAdmin) admin from django.db import models# Create your models here.class User(models.Model):name = models.CharField(max_length=
32)pwd = models.CharField(max_length=
32)roles = models.ManyToManyField(
'Role')def __str__(self):return self.nameclass Role(models.Model):title = models.CharField(max_length=
32)permissions = models.ManyToManyField(
'Permission')def __str__(self):return self.titleclass Permission(models.Model):title = models.CharField(max_length=
32)url = models.CharField(max_length=
128)def __str__(self):return self.title
models.py from django.shortcuts import render,HttpResponse,redirect
from django.views import View
from app01 import models# Create your views here.
class Login(View): def get(self,request):return render(request,
'login.html')def post(self,request):#step 1: 獲取用戶提交的用戶名和密碼user = request.POST.
get(
'user')pwd = request.POST.
get(
'pwd')#step 2: 根據用戶名和密碼取數據庫中驗證,相當于auth.authentacateuser_obj = models.User.objects.filter(name=user,pwd=
pwd).first()if user_obj:#如果登陸成功, 將 用戶名存到 session 中, 將 permission_llist存到session中request.session['user'] =
user_obj.namepermission_obj =
models.Permission.objects.filter(role__user=
user_obj)print(permission_obj)permission_list = [i.url
for i
in permission_obj]request.session['permission_list'] =
permission_listreturn redirect(request.path)else:return render(request,
'login.html',{
'error':
'用戶名或密碼錯誤'})class Record(View):def get(self,request):return render(request,
'record.html')class AddRecords(View):def get(self,request):return render(request,
'addrecords.html')class EditRecords(View):def get(self,request):return render(request,
'editrecords.html')class DeleteRecords(View):def get(self,request):return render(request,
'deletecustomer.html')class Customer(View):def get(self,request):return render(request,
'customer.html')
class AddCustomer(View):def get(self,request):return render(request,
'addcustomer.html')
class EditCustomer(View):def get(self,request):return render(request,
'editrecords.html')
class DeleteCustomer(View):def get(self,request):return render(request,
'deletecustomer.html') views """crm03 URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views1. Add an import:
from my_app import views2. Add a URL to urlpatterns: url(r
'^$', views.home, name=
'home')
Class-
based views1. Add an import:
from other_app.views import Home2. Add a URL to urlpatterns: url(r
'^$', Home.as_view(), name=
'home')
Including another URLconf1. Import the include() function:
from django.conf.urls import url, include2. Add a URL to urlpatterns: url(r
'^blog/', include(
'blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01 import viewsurlpatterns =
[url(r'^admin/', admin.site.urls),url(r'^login/', views.Login.as_view(), name=
'login'),url(r'^record/$', views.Record.as_view(), name=
'record'),url(r'^record/add/', views.AddRecords.as_view(), name=
'addrecord'),url(r'^record/edit/', views.EditRecords.as_view(), name=
'editrecord'),url(r'^record/delete/', views.DeleteRecords.as_view(), name=
'deleterecord'),url(r'^customer/$', views.Customer.as_view(), name=
'customer'),url(r'^customer/add/', views.AddCustomer.as_view(), name=
'addcustomer'),url(r'^customer/edit/', views.EditCustomer.as_view(), name=
'editcustomer'),url(r'^customer/delete/', views.DeleteCustomer.as_view(), name=
'deletecustomer'),
] urls 1 from django.utils.deprecation import MiddlewareMixin
2 import re
3 from django.shortcuts import HttpResponse,redirect,render
4
5 class Md1(MiddlewareMixin):
6
7 def process_request(self,request):
8
9 #白名單放行
10 for i
in [
'/login/',
'/admin/',]:
11 ret =
re.search(i,request.path)
12 print(ret,i)
13 if ret:
14 print(
'判斷之后:',ret,i)
15 return None
16
17 #登錄認證
18 user = request.session.
get(
'user')
19 if not user:
20 return redirect(
'login')
21
22 #權限認證
23 for item
in request.session.
get(
'permission_list'):
24 print(item)
25 reg = f
'^{item}$'
26 ret =
re.search(reg,request.path)
27 if ret:
28 return
29 else:
30 return HttpResponse(
'不好意思,權限不夠,無權訪問')
中間件 ?
轉載于:https://www.cnblogs.com/zhangjian0092/p/11024655.html
總結
以上是生活随笔為你收集整理的django crm 03的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。