Django之小结
常用的函数方法与包的调用
# 登陆视图函数 def login(request): if request.method == 'GET': return render(request,'login.html') else: user = request.POST.get('user') pwd = request.POST.get('pwd') validcode = request.POST.get('validcode') response = {'user':None,'err_msg':''} if validcode.upper() == requeset.session['keep_str'].upper(): user_obj = auth.authenticate(username=user,password=pwd) if user_obj: auth.login(request,user_obj) response['user']=user else: response['err_msg']='用户名或密码错误' else: response['err_msg']='验证码错误' from django.http import JsonResponse(response) # 注册视图函数 def register(request): if request.is_ajax(): res = {'user':None,'err_msg':''} form = UserForm(request.POST) if form.is_valid(): res['user']=form.cleaned_data.get('user') user = form.cleaned_data.get('user') pwd = form.cleaned_data.get('pwd') email = form.cleaned_data.get('email') user = UserInfo.objects.create_user(username=user,password=pwd,email=email) else: res['err_msg']=form.error return JsonResponse(res) else: form =UserForm() return render(request,'register.html',local()) # 注销 def logout(request): auth.logout(request) return redirect('/login/') # 修改密码 def setpwd(request): if request.method =='GET': return render(request,'setpwd.html') else: response={'user':None,'err_msg':''} pwd = request.POST.get('pwd') rpwd = request.POST.get('rpwd') if pwd ==rpwd: user = UserInfo.objects.get(username=request.user.username) user.set_password(raw_password=pwd) user.save() response['user']=200 else: response['err_msg']='两次输入不一致' return JsonResponse(response) # 主页 def index(request): return render(request,'index.html') # django组件路径 shortcuts:捷径 from django.shortcuts import render,HttpResponse,redriect http:传输 from django.http import JsonResponse contrib:附件 from django.contrib import auth urls:路径 from django.urls import reverse models:模型 from django.models import Q # 登陆装饰器 auth组件提供的装饰器 导入方法: from django.auth.decorators import login_required 此外还需要在setting中设置 认证路径 LOGIN_ULR='/longin/' # 静态文件 1.创建静态文件包 static 2.在setting中设置 static路径 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] # 替换auth中的User表 1.导入 from django.contrib.auth.models import AbstractUser 2.在模型类中创建UserInfo表继承AbstractUser 3.在setting中设置路径 AUTH_USER_MODEL='' # cbv 导入View from django.views import View class CustomerView(View): def get(self,request): if reverse('customers_list') == request.path label='公户列表' customer_list = Customer.objects.filter(consultant__innull=Ture) else: label='我的客户' customer_list = Customer.objects.filter(consultant=request.user) # search val = request.GET.get('q') field = request.GET.get('field') if val: q = Q() q.chidren.append((field + '__contains',val)) customer_list = customer_list.filter(q) # 添加与编辑 基于cbv 1.创建视图类 2.编写get与post方法 from django.views import View class AddEditConsultRecordView(View): def get(self,request,edit_id=None): edit_obj = ConsultRecord.objects.filter(pk=edit_id).first() form = ConsultRecordModelForm(request,instance=edit_obj) return render(request, "add_edit_consultrecord.html", {"form": form,"edit_obj":edit_obj}) def post(self,request,edit_id=None): edit_obj = ConsultRecord.objects.filter(pk=edit_id).first() form=ConsultRecordModelForm(request.POST,instance=edit_obj) if form.is_valid(): form.save() return redirect(reverse("consult_records")) else: return render(request, "add_edit_consultrecord.html", {"form": form,"edit_obj":edit_obj}) # 权限相关 1.创建表关系,建立权限关系表 2.编写视图函数与中间件 视图函数: 1.获取用户信息 2.验证信息,成功设置session(request.session['user_id']=user.pk), 3.查询表中用户拥有的权限 permissions = Role.objects.filter(user=user).values('permissions__url').distinct() #去重 4.遍历permissions保存列表格式,保存到session中 requeset.session['premissios_list']=premissios_list 中间件: 1.获取到访问路径 2.设置白名单的同时需要注意admin 3.校验是否登陆过,判断session中有没有值,如果没有返回 登陆路径 4.校验权限,判断session中有没有对应的权限 for reg in premissions_list: reg='^%s$' %reg rul = re.search(reg,current_path) if rul: return Nnoe #放行