Django项目:CRM(客户关系管理系统)--55--46PerfectCRM实现登陆后页面才能访问
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #urls.py 2 3 """PerfectCRM URL Configuration 4 5 The `urlpatterns` list routes URLs to views. For more information please see: 6 https://docs.djangoproject.com/en/2.0/topics/http/urls/ 7 Examples: 8 Function views 9 1. Add an import: from my_app import views 10 2. Add a URL to urlpatterns: path('', views.home, name='home') 11 Class-based views 12 1. Add an import: from other_app.views import Home 13 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 14 Including another URLconf 15 1. Import the include() function: from django.urls import include, path 16 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 17 """ 18 from django.contrib import admin 19 from django.urls import path 20 21 # ————————02PerfectCRM创建ADMIN页面———————— 22 from django.conf.urls import url # URL 23 from django.conf.urls import include # 分发URL 24 # ————————02PerfectCRM创建ADMIN页面———————— 25 26 # ————————46PerfectCRM实现登陆后页面才能访问———————— 27 from PerfectCRM import main_views 28 # ————————46PerfectCRM实现登陆后页面才能访问———————— 29 30 urlpatterns = [ 31 path('admin/', admin.site.urls), 32 33 # ————————02PerfectCRM创建ADMIN页面———————— 34 url(r'^king_admin/', include("king_admin.king_urls")), # 自定义admin 35 # ————————02PerfectCRM创建ADMIN页面———————— 36 37 # ————————03PerfectCRM创建基本数据———————— 38 url(r'^DBadd/', include("DBadd.DBadd_urls")), # 添加随机数据 39 # ————————03PerfectCRM创建基本数据———————— 40 # ————————38PerfectCRM实现全局账号登录注销———————— 41 url(r'^gbacc/', include("gbacc.gbacc_urls")), # 全局账号登录注销 42 # ————————38PerfectCRM实现全局账号登录注销———————— 43 44 # ————————42PerfectCRM实现AJAX全局账号注册———————— 45 url(r'^gbacc/', include("gbacc.gbacc_ajax_urls")), # 全局账号登录注销 46 # ————————42PerfectCRM实现AJAX全局账号注册———————— 47 48 # ————————46PerfectCRM实现登陆后页面才能访问———————— 49 url(r'^$', main_views.PortalView.as_view()), 50 # ————————46PerfectCRM实现登陆后页面才能访问———————— 51 ]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # main_views.py 2 # ————————46PerfectCRM实现登陆后页面才能访问———————— 3 #门户主页 4 from django.views.generic import TemplateView 5 6 class PortalView(TemplateView): 7 8 template_name = "portal.html" 9 10 # ————————46PerfectCRM实现登陆后页面才能访问————————
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 {#portal.html#} 2 {## ————————46PerfectCRM实现登陆后页面才能访问————————#} 3 {% extends 'king_admin/table_index.html' %} 4 {% block right-container-content %} 5 <div class="container col-lg-offset-3"> 6 <h2><a class="form-signin-heading" href="/king_admin/">King_admin主页</a> </h2> 7 <h2><a class="form-signin-heading" href="/king_admin/crm/">单个具体app页面</a> </h2> 8 <h2><a class="form-signin-heading" href="/king_admin/crm/userprofile/">详细内容</a> </h2> 9 <h2><a class="form-signin-heading" href="/king_admin/crm/userprofile/1/change/">修改信息</a> </h2> 10 <h2><a class="form-signin-heading" href="/king_admin/crm/userprofile/1/password/">修改密码</a> </h2> 11 <h2><a class="form-signin-heading" href="/king_admin/crm/userprofile/add/">添加信息</a> </h2> 12 <h2><a class="form-signin-heading" href="/king_admin/crm/userprofile/1/delete/">删除信息</a> </h2> 13 </div> 14 15 {% endblock %} 16 17 {## ————————46PerfectCRM实现登陆后页面才能访问————————#}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #views 2 3 # ————————02PerfectCRM创建ADMIN页面———————— 4 from django.shortcuts import render 5 6 # ————————04PerfectCRM实现King_admin注册功能———————— 7 # from django import conf #配置文件 8 # print("dj conf:",conf) #配置文件 9 # print("dj conf:",conf.settings)#配置文件.设置 10 # ————————04PerfectCRM实现King_admin注册功能———————— 11 12 # ————————04PerfectCRM实现King_admin注册功能———————— 13 from king_admin import app_config #自动调用 动态加载类和函数 14 # ————————04PerfectCRM实现King_admin注册功能———————— 15 16 # ————————04PerfectCRM实现King_admin注册功能———————— 17 # from king_admin.base_admin import registered_sites # registered_sites={} 18 from king_admin import base_admin 19 # ————————04PerfectCRM实现King_admin注册功能———————— 20 21 # ————————11PerfectCRM实现King_admin基本分页———————— 22 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # 分页功能 23 # ————————11PerfectCRM实现King_admin基本分页———————— 24 25 # ————————46PerfectCRM实现登陆后页面才能访问———————— 26 from django.contrib.auth.decorators import login_required 27 # ————————46PerfectCRM实现登陆后页面才能访问———————— 28 29 def app_index(request): 30 # ————————04PerfectCRM实现King_admin注册功能———————— 31 # for app in conf.settings.INSTALLED_APPS: 32 # print(app)#循环打印 配置文件.设置.安装应用程序#.Perfectcustomer\settings里的INSTALLED_APPS列表 33 # ————————04PerfectCRM实现King_admin注册功能———————— 34 35 # ————————04PerfectCRM实现King_admin注册功能———————— 36 # return render(request, 'king_admin/app_index.html') 37 # print("registered_sites",registered_sites) 38 # return render(request, 'king_admin/app_index.html') 39 # ————————04PerfectCRM实现King_admin注册功能———————— 40 41 # ————————04PerfectCRM实现King_admin注册功能———————— 42 # print("registered_sites", base_admin.registered_sites) 43 # return render(request, 'king_admin/app_index.html') 44 # ————————04PerfectCRM实现King_admin注册功能———————— 45 46 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 47 print("registered_sites",base_admin.site.registered_sites) 48 return render(request, 'king_admin/app_index.html', {"site": base_admin.site}) 49 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 50 51 # ————————02PerfectCRM创建ADMIN页面———————— 52 53 # ————————13PerfectCRM实现King_admin分页页数———————— 54 #处理def table_data_list(request,app_name,model_name):里的内容, 55 def filter_querysets(request,queryset): 56 condtions = {} #定义一个字典用来存过滤的条件 57 for k,v in request.GET.items():#不需要空的,判断是否为空 58 # ————————18PerfectCRM实现King_admin搜索关键字———————— 59 # ————————17PerfectCRM实现King_admin单列排序———————— 60 # if k=="page":continue##kingadmin分页功能 61 62 # if k=="page":continue##kingadmin分页功能 #写法一 63 # elif k=="_o":continue##kingadmin排序功能 <a href="?_o={{ column }}">{{ column }}</a> 64 65 # if k in ("page","_o") :continue #kingadmin分页功能 #kingadmin排序功能 #写法二 66 67 # if k == "page"or k == "_o": #保留的分页关键字 和 排序关键字 #写法三 68 # continue #continue是结束单次循环 69 # ————————17PerfectCRM实现King_admin单列排序———————— 70 if k in ("page", "_o", "_q"): continue # kingadmin分页,排序,搜索#判断标签是否存在 自定义的名称 71 # ————————18PerfectCRM实现King_admin搜索关键字———————— 72 73 74 # ————————15PerfectCRM实现King_admin多条件过滤———————— 75 if v: 76 condtions[k] = v #进行配对字典 77 # ————————15PerfectCRM实现King_admin多条件过滤———————— 78 query_res = queryset.filter(**condtions) 79 80 return query_res,condtions 81 # ————————13PerfectCRM实现King_admin分页页数———————— 82 83 84 85 # ————————08PerfectCRM实现King_admin显示注册表的字段表头———————— 86 @login_required # 登陆后页面才能访问 87 def table_data_list(request,app_name,model_name): 88 #通过2个参数到base_admin里获取class AdminRegisterException(Exception): 的对象 89 admin_obj = base_admin.site.registered_sites[app_name][model_name] #base_admin 90 91 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 92 if request.method == "POST":#批量操作 93 action = request.POST.get("action_select")#要调用的自定制功能函数 94 selected_ids = request.POST.get("selected_ids")#前端提交的数据 95 print(selected_ids,type(selected_ids),"selected_ids-----") 96 #if type(selected_ids)!='str': 97 #selected_ids = json.loads(selected_ids)#进行转换数据 98 print(selected_ids,type(action),action,"selected_ids==========") 99 #print("action:",selected_ids,action) 100 if selected_ids : 101 #selected_ids = json.loads(selected_ids)#进行转换数据 102 selected_objs = admin_obj.model.objects.filter(id__in=selected_ids.split(','))#返回之前所选中的条件 103 else: 104 raise KeyError('错误,没有选择对象!') 105 106 if hasattr(admin_obj,action): 107 action_func = getattr(admin_obj,action)#如果admin_obj 对象中有属性action 则打印self.action的值,否则打印'not find' 108 request._admin_action=action#添加action内容 109 print(request._admin_action,action,'<--------') 110 return action_func(request,selected_objs) 111 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 112 113 114 # ————————09PerfectCRM实现King_admin显示注册表的内容———————— 115 admin_obj.querysets = admin_obj.model.objects.all()#取数据 传到 前端 116 # ————————09PerfectCRM实现King_admin显示注册表的内容———————— 117 118 # ————————11PerfectCRM实现King_admin分页显示条数———————— 119 # from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # 分页功能#放在顶上导入 120 obj_list = admin_obj.model.objects.all()#取数据 传到 前端 #base_admin #获取传过来的所有对象 121 122 # ————————13PerfectCRM实现King_admin分页页数———————— 123 queryset, condtions = filter_querysets(request, obj_list) #base_admin # 调用条件过滤 124 # ————————13PerfectCRM实现King_admin分页页数———————— 125 126 # ————————18PerfectCRM实现King_admin搜索关键字———————— 127 queryset = get_queryset_search_result(request,queryset,admin_obj)##搜索后 128 # ————————18PerfectCRM实现King_admin搜索关键字———————— 129 130 # ————————26PerfectCRM实现King_admin自定义排序———————— 131 sorted_queryset = get_orderby(request, queryset,admin_obj) #排序后的结果 132 # ————————17PerfectCRM实现King_admin单列排序———————— 133 # sorted_queryset = get_orderby(request, queryset) #排序后的结果 134 # ————————15PerfectCRM实现King_admin多条件过滤———————— 135 # paginator = Paginator(obj_list,admin_obj.list_per_page) #kingadmin里class CustomerAdmin(BaseAdmin): 136 # paginator = Paginator(queryset, admin_obj.list_per_page) 137 # ————————15PerfectCRM实现King_admin多条件过滤———————— 138 paginator = Paginator(sorted_queryset, admin_obj.list_per_page) 139 # ————————17PerfectCRM实现King_admin单列排序———————— 140 # ————————26PerfectCRM实现King_admin自定义排序———————— 141 142 143 page = request.GET.get('page') 144 try: 145 objs = paginator.page(page) # 当前的页面的数据 146 except PageNotAnInteger: 147 # 如果页面不是一个整数,交付第一页。 148 objs = paginator.page(1) 149 except EmptyPage: 150 # 如果页面的范围(例如9999),交付最后一页的搜索结果。 151 objs = paginator.page(paginator.num_pages) 152 admin_obj.querysets = objs # base_admin 153 154 # ————————13PerfectCRM实现King_admin分页页数———————— 155 admin_obj.filter_condtions = condtions # base_admin 156 # ————————13PerfectCRM实现King_admin分页页数———————— 157 158 # ————————11PerfectCRM实现King_admin分页显示条数———————— 159 160 return render(request,"king_admin/table_data_list.html",locals()) 161 # ————————08PerfectCRM实现King_admin显示注册表的字段表头———————— 162 163 164 165 166 # ————————17PerfectCRM实现King_admin单列排序———————— 167 # def get_orderby(request,queryset): 168 # order_by_key = request.GET.get("_o") #获取URL里有没有("_o") <a href="?_o={{ column }}">{{ column }}</a> 169 # #页面刚开始没有这个值 170 # if order_by_key != None: #有("_o")这个值 就进行排序 171 # query_res = queryset.order_by(order_by_key) 172 # else: #没有就不排序,直接返回 173 # query_res = queryset 174 # return query_res #排序时会错 175 176 # orderby_key = request.GET.get("_o") 177 # if orderby_key: 178 # return queryset.order_by(orderby_key) 179 # return queryset 180 181 #在table_data_list添加 182 # def table_data_list(request,app_name,model_name): #详细列表 183 # sorted_queryset = get_orderby(request, queryset) 184 #在filter_querysets添加 185 #if k == "page"or k == "_o": #保留的分页关键字 和 排序关键字 186 # ————————17PerfectCRM实现King_admin单列排序———————— 187 188 # ————————26PerfectCRM实现King_admin自定义排序———————— 189 def get_orderby(request, queryset, admin_obj): 190 orderby_key = request.GET.get("_o") 191 #order_by_key1=order_by_key.strip() 192 if orderby_key: #有获取到字段 193 query_res = queryset.order_by(orderby_key.strip()) #.strip()默认删除空白符(包括'\n', '\r', '\t', ' ') 194 else: 195 if admin_obj.ordering: #查看kingadmin‘有没有 ordering = '-qq' # 自定义排序 196 query_res = queryset.order_by("%s" %admin_obj.ordering) 197 else: 198 query_res = queryset.order_by('-id') #默认倒序 199 return query_res 200 201 #在table_data_list添加 202 # def table_data_list(request,app_name,model_name): #详细列表 203 # sorted_queryset = get_orderby(request, queryset, admin_obj) # 排序后的结果 204 # ————————26PerfectCRM实现King_admin自定义排序———————— 205 206 207 # ————————18PerfectCRM实现King_admin搜索关键字———————— 208 from django.db.models import Q 209 def get_queryset_search_result(request,queryset,admin_obj): 210 search_key = request.GET.get("_q", "")#取定义名,默认为空 211 q_obj = Q()#多条件搜索 #from django.db.models import Q 212 q_obj.connector = "OR" # or/或 条件 213 for column in admin_obj.search_fields: #搜索目标crm/kingadmin里class CustomerAdmin(BaseAdmin):search_fields = ('name','qq',) 214 q_obj.children.append(("%s__contains" % column, search_key)) #运态添加多个条件 215 res = queryset.filter(q_obj) #对数据库进行条件搜索 216 return res #返回结果 217 #在table_data_list添加 218 #def table_data_list(request,app_name,model_name): #详细列表 219 # queryset = get_queryset_search_result(request,queryset,admin_obj) 220 # ————————18PerfectCRM实现King_admin搜索关键字———————— 221 222 223 # ————————19PerfectCRM实现King_admin数据修改———————— 224 from king_admin import forms 225 #修改内容 226 # def table_change(request,app_name,model_name): 227 # obj_form = forms.CustomerModelForm() #创建一个空表单 228 # return render(request,"kingadmin/table_change.html",locals()) 229 @login_required # 登陆后页面才能访问 230 def table_change(request,app_name,model_name,obj_id): 231 admin_obj = base_admin.site.registered_sites[app_name][model_name] #获取表对象 232 #kingadmin/forms.py里def CreateModelForm(request,admin_obj): 233 model_form = forms.CreateModelForm(request,admin_obj=admin_obj) ##modelform 生成表单 加验证 234 # obj_form = model_form() # 表单 235 obj = admin_obj.model.objects.get(id=obj_id)#根据ID获取数据记录 236 237 # ————————28PerfectCRM实现King_admin编辑限制———————— 238 # ————————20PerfectCRM实现King_admin数据修改美化———————— 239 # #面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。 240 # obj_form = model_form(instance=obj) # 数据传入表单 241 242 if request.method == "GET":#如果是 GET 表示 是添加记录 243 obj_form = model_form(instance=obj)#数据传入表单 244 elif request.method == "POST":#如果是 POST 表示 是修改后的数据 245 obj_form = model_form(instance=obj,data=request.POST)#更新数据 246 if obj_form.is_valid(): 247 obj_form.save() 248 # ————————20PerfectCRM实现King_admin数据修改美化———————— 249 # ————————28PerfectCRM实现King_admin编辑限制———————— 250 251 return render(request,"king_admin/table_change.html",locals()) 252 # ————————19PerfectCRM实现King_admin数据修改———————— 253 254 255 # ————————21PerfectCRM实现King_admin查看页面美化———————— 256 #单个具体app页面 257 @login_required # 登陆后页面才能访问 258 def table_index(request,app_name): 259 bases=base_admin.site.registered_sites[app_name]#取出对应app对象 260 return render(request, 'king_admin/table_index.html', {"site":bases,'app_name':app_name}) 261 # ————————21PerfectCRM实现King_admin查看页面美化———————— 262 263 # ————————22PerfectCRM实现King_admin数据添加———————— 264 from django.shortcuts import redirect # kingadmin添加内容 265 @login_required # 登陆后页面才能访问 266 def table_add(request,app_name,model_name): 267 admin_obj = base_admin.site.registered_sites[app_name][model_name] #获取表对象 268 # ————————32PerfectCRM实现King_admin添加不进行限制———————— 269 admin_obj.is_add_form=True#表示为新增表单 270 # ————————32PerfectCRM实现King_admin添加不进行限制———————— 271 model_form = forms.CreateModelForm(request,admin_obj=admin_obj) ##modelform 生成表单 加验证 272 if request.method == "GET": 273 obj_form = model_form() #跳转过来的为空 274 elif request.method == "POST": 275 obj_form = model_form(data=request.POST) #创建数据 276 277 # ————————37PerfectCRM实现King_admin添加用户时密码加密———————— 278 password=request.POST.get('password') #取前端输入的密码 279 email=request.POST.get('email') #取前端输入的邮箱 280 # ————————37PerfectCRM实现King_admin添加用户时密码加密———————— 281 282 if obj_form.is_valid(): 283 # ————————32PerfectCRM实现King_admin添加不进行限制———————— 284 # obj_form.save() 285 try: 286 obj_form.save()#表单验证通过保存 287 except Exception as e: 288 return redirect("/king_admin/%s/%s/" % (app_name,model_name))#转到之前的页面 289 # ————————32PerfectCRM实现King_admin添加不进行限制———————— 290 if not obj_form.errors: #没有错误返回原来的页面 291 292 # ————————37PerfectCRM实现King_admin添加用户时密码加密———————— 293 if email: 294 obj=admin_obj.model.objects.filter(email=email).first() # 对象 295 obj.set_password(password) # 加密 296 try: 297 obj.save()#表单验证通过保存 298 except Exception as e: 299 return redirect("/king_admin/%s/%s/" % (app_name, model_name)) 300 # ————————37PerfectCRM实现King_admin添加用户时密码加密———————— 301 302 #from django.shortcuts import redirect 303 return redirect("/king_admin/%s/%s/" % (app_name,model_name)) 304 return render(request, "king_admin/table_add.html", locals()) 305 # ————————22PerfectCRM实现King_admin数据添加———————— 306 307 308 # ————————23PerfectCRM实现King_admin数据删除———————— 309 @login_required # 登陆后页面才能访问 310 def table_delete(request,app_name,model_name,obj_id): 311 admin_obj = base_admin.site.registered_sites[app_name][model_name]#表类 312 objs=admin_obj.model.objects.filter(id=obj_id)#类的对象 313 314 # ————————33PerfectCRM实现King_admin编辑整张表限制———————— 315 # if request.method=='POST': 316 # objs.delete()#删除 317 # return redirect("/king_admin/%s/%s/" % (app_name,model_name))#转到列表页面 318 319 app_name=app_name 320 if admin_obj.readonly_table: 321 errors={'锁定的表单':'该表单:<%s>,已经锁定,不能删除当前记录!'%model_name} 322 else: 323 errors={} 324 if request.method=='POST': 325 if not admin_obj.readonly_table: 326 objs.delete()#删除 327 return redirect("/king_admin/%s/%s/" % (app_name,model_name))#转到列表页面 328 # ————————33PerfectCRM实现King_admin编辑整张表限制———————— 329 330 331 return render(request, "king_admin/table_delete.html", locals())#locals 返回一个包含当前范围的局部变量字典。 332 # ————————23PerfectCRM实现King_admin数据删除———————— 333 334 # ————————36PerfectCRM实现King_admin密码修改———————— 335 #密码修改 336 @login_required # 登陆后页面才能访问 337 def password_reset(request,app_name,model_name,obj_id): 338 admin_obj = base_admin.site.registered_sites[app_name][model_name]#表类 339 model_form = forms.CreateModelForm(request,admin_obj=admin_obj)#modelform 生成表单 加验证 340 obj=admin_obj.model.objects.get(id=obj_id)#类表的对象 341 errors={}#错误提示 342 if request.method=='POST': 343 _password1=request.POST.get('password1') #获取页面输入的值 344 _password2=request.POST.get('password2') #获取页面输入的值 345 if _password1==_password2: 346 if len(_password1)>5: 347 obj.set_password(_password1)#继承Django方法 #加密 348 obj.save() #保存 349 return redirect(request.path.rstrip('password/') + ('/change/')) #替换URL名 350 else: 351 errors['password_too_short']='必须不少于6字符' 352 else: 353 errors['invalid_password']='两次输入的密码不一样'#密码不一致 354 355 return render(request, "king_admin/password_reset.html", locals())#locals 返回一个包含当前范围的局部变量字典。 356 # ————————36PerfectCRM实现King_admin密码修改———————— 357 358 # ————————37PerfectCRM实现King_admin添加用户时密码加密———————— 359 def password_add(request,app_name,model_name): 360 return redirect("/king_admin/%s/%s/add/" % (app_name, model_name)) # 转到添加页面 361 # ————————37PerfectCRM实现King_admin添加用户时密码加密————————
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # settings.py 2 3 """ 4 Django settings for PerfectCRM project. 5 6 Generated by 'django-admin startproject' using Django 2.0.3. 7 8 For more information on this file, see 9 https://docs.djangoproject.com/en/2.0/topics/settings/ 10 11 For the full list of settings and their values, see 12 https://docs.djangoproject.com/en/2.0/ref/settings/ 13 """ 14 15 import os 16 17 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 18 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 19 20 21 # Quick-start development settings - unsuitable for production 22 # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ 23 24 # SECURITY WARNING: keep the secret key used in production secret! 25 SECRET_KEY = 'atkhzsd7emv4_okn@ynhji)p)qbpuvhq+a7@yx5=chaa0$l_br' 26 27 # SECURITY WARNING: don't run with debug turned on in production! 28 DEBUG = True 29 30 ALLOWED_HOSTS = [] 31 32 33 # Application definition 34 35 INSTALLED_APPS = [ 36 'django.contrib.admin', 37 'django.contrib.auth', 38 'django.contrib.contenttypes', 39 'django.contrib.sessions', 40 'django.contrib.messages', 41 'django.contrib.staticfiles', 42 43 # ————————04PerfectCRM实现King_admin注册功能———————— 44 # 'crm.apps.CrmConfig', 45 'crm', 46 # ————————04PerfectCRM实现King_admin注册功能———————— 47 48 # ————————02PerfectCRM创建ADMIN页面———————— 49 'king_admin', 50 # ————————02PerfectCRM创建ADMIN页面———————— 51 # ————————38PerfectCRM实现全局账号登录注销———————— 52 'gbacc', 53 # ————————38PerfectCRM实现全局账号登录注销———————— 54 55 ] 56 57 MIDDLEWARE = [ 58 'django.middleware.security.SecurityMiddleware', 59 'django.contrib.sessions.middleware.SessionMiddleware', 60 'django.middleware.common.CommonMiddleware', 61 'django.middleware.csrf.CsrfViewMiddleware', 62 'django.contrib.auth.middleware.AuthenticationMiddleware', 63 'django.contrib.messages.middleware.MessageMiddleware', 64 'django.middleware.clickjacking.XFrameOptionsMiddleware', 65 ] 66 67 ROOT_URLCONF = 'PerfectCRM.urls' 68 69 TEMPLATES = [ 70 { 71 'BACKEND': 'django.template.backends.django.DjangoTemplates', 72 # ————————02PerfectCRM创建ADMIN页面———————— 73 'DIRS': [os.path.join(BASE_DIR, 'templates'), 74 os.path.join(BASE_DIR, 'king_admin/king_templates'), 75 76 # ————————03PerfectCRM创建基本数据———————— 77 os.path.join(BASE_DIR, 'DBadd/DBadd_templates'), 78 # ————————03PerfectCRM创建基本数据———————— 79 # ————————38PerfectCRM实现全局账号登录注销———————— 80 os.path.join(BASE_DIR, 'gbacc/gbacc_templates'), ] 81 # ————————38PerfectCRM实现全局账号登录注销———————— 82 83 , 84 # ————————02PerfectCRM创建ADMIN页面———————— 85 'APP_DIRS': True, 86 'OPTIONS': { 87 'context_processors': [ 88 'django.template.context_processors.debug', 89 'django.template.context_processors.request', 90 'django.contrib.auth.context_processors.auth', 91 'django.contrib.messages.context_processors.messages', 92 ], 93 }, 94 }, 95 ] 96 97 WSGI_APPLICATION = 'PerfectCRM.wsgi.application' 98 99 100 # Database 101 # https://docs.djangoproject.com/en/2.0/ref/settings/#databases 102 103 DATABASES = { 104 'default': { 105 'ENGINE': 'django.db.backends.sqlite3', 106 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 107 } 108 } 109 110 111 # Password validation 112 # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators 113 114 AUTH_PASSWORD_VALIDATORS = [ 115 { 116 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 117 }, 118 { 119 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 120 }, 121 { 122 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 123 }, 124 { 125 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 126 }, 127 ] 128 129 130 # Internationalization 131 # https://docs.djangoproject.com/en/2.0/topics/i18n/ 132 133 # ————————01PerfectCRM基本配置ADMIN———————— 134 #LANGUAGE_CODE = 'en-us' 135 136 #英文转中文方法 137 LANGUAGE_CODE = 'zh-Hans' 138 # ————————01PerfectCRM基本配置ADMIN———————— 139 140 TIME_ZONE = 'UTC' 141 142 USE_I18N = True 143 144 USE_L10N = True 145 146 USE_TZ = True 147 148 149 # Static files (CSS, JavaScript, Images) 150 # https://docs.djangoproject.com/en/2.0/howto/static-files/ 151 152 STATIC_URL = '/static/' 153 154 # ————————01PerfectCRM基本配置ADMIN———————— 155 STATICFILES_DIRS = [os.path.join(BASE_DIR,'king_admin/static'), 156 # ————————01PerfectCRM基本配置ADMIN———————— 157 # ————————38PerfectCRM实现全局账号登录注销———————— 158 os.path.join(BASE_DIR, 'gbacc/static'),] 159 # ————————38PerfectCRM实现全局账号登录注销———————— 160 161 # ————————34PerfectCRM实现CRM自定义用户———————— 162 AUTH_USER_MODEL = 'crm.UserProfile'#使用自定的admin 表单 163 # ————————34PerfectCRM实现CRM自定义用户———————— 164 165 166 167 # ————————44PerfectCRM实现账号快速注册登陆———————— 168 # send e-mail 169 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' #email后端 170 EMAIL_USE_TLS = False #是否使用TLS安全传输协议 171 EMAIL_USE_SSL = True #是否使用SSL加密,qq企业邮箱要求使用 172 EMAIL_HOST = 'smtp.sina.cn' #发送邮件的邮箱 的 SMTP服务器 #根据情况重新配置 173 EMAIL_PORT = 465 #发件箱的SMTP服务器端口 #一般不需要修改465 174 EMAIL_HOST_USER = 'perfectcrm@sina.cn' #发送邮件的邮箱账号 #根据情况重新配置 #perfectcrm@sina.cn pydjango@sina.cn 175 EMAIL_HOST_PASSWORD = 'admin123456' #发送邮件的邮箱密码 #根据情况重新配置 176 177 # ————————44PerfectCRM实现账号快速注册登陆———————— 178 179 180 # ————————46PerfectCRM实现登陆后页面才能访问———————— 181 LOGIN_URL = '/gbacc/gbacc_login/'# login_url 配置 #默认 /accounts/login/ #注意: / (绝对路径) 182 # ————————46PerfectCRM实现登陆后页面才能访问————————
![](https://files.cnblogs.com/files/ujq3/wxzf.gif)
您的资助是我最大的动力!
金额随意,欢迎来赏!
![](https://files.cnblogs.com/files/ujq3/zfbzf.gif)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【颜言】!