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 #放行
Django之小结的更多相关文章
- django常见问题小结,细节容易忽视
中文URL:这个其实是很常识的东西,但是之前做web一直没注意过,在使用HttpResponseRedirect的时候,如果Redirect的URL中带中文的话,会报UnicodeEncodeErro ...
- django 单元测试小结
测试的场景 框架Django1.8 测试工具 unittest, 要记得给test设置一个独特的settings. 测试请求 也就是测试整个view部分 官方案例 其中可能会遇到登录,或者时sessi ...
- django 知识点小结
以下内容为用django写blog中的一些知识点,权当复习. 一.定义view 1.get_object_or_404()是用get()查询数据,如果不存在就直接返回404 参数: get_objec ...
- django 编程小结
1.增删改查 add obj = Obj(atr=atr..) obj.save() update: __dict__ 遍历 del: 根据id列表删除 query: 首次查询: 直接跳转至页面,前端 ...
- django使用小结
一.静态文件的使用 二.csrf跨站访问安全机制设置 三.MODEL模型使用
- django单元测试
django 单元测试小结 django 测试 从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合 ...
- Python框架之Django学习笔记(五)
第一个Django网页小结 进来的请求转入/hello/. Django通过在ROOT_URLCONF配置来决定根URLconf. Django在URLconf中的所有URL模式中,查找第一个匹配/h ...
- Django学习系列5:为视图编写单元测试
打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...
- Django rest framework之序列化小结
最近在DRF的序列化上踩过了不少坑,特此结合官方文档记录下,方便日后查阅. [01]前言 serializers是什么?官网是这样的”Serializers allow complex d ...
随机推荐
- 【443】Tweets Analysis Q&A
[Question 01] When converting Tweets info to csv file, commas in the middle of data (i.e. locati ...
- Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 (1).KVM虚拟机克隆 KVM虚拟克隆命令virt-clone [选项] 常用选项 ...
- Go并发编程实战 第2版 PDF (中文版带书签)
Go并发编程实战 第2版 目录 第1章 初识Go语言 1 1.1 语言特性 1 1.2 安装和设置 2 1.3 工程结构 3 1.3.1 工作区 3 1.3.2 GOPATH 4 1.3.3 源码文件 ...
- F110增强
1.F110 删除操作的增强: 方法:SE19 ZE_F110_DELETE_CHECK 代码: ENHANCEMENT 1 ZE_F110_DELETE_CHECK. "act ...
- Linq中demo,用力看看吧
本文导读:LINQ to SQL全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能.Linq中where查询与SQL命令中的Where作用相似,都是起到范围限定 ...
- 关于css清除元素浮动的方法总结(overflow clear floatfix)
在前两天的一个面试中考官问我web中清除浮动的一些css常用方法,我很轻松的答出了: 1.overflow:hidden 2.clear:both 3.floatfix类 然后问题就来了,考官接着问' ...
- 【ARTS】01_45_左耳听风-201900916~201900922
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- ubuntu 搭建jdk1.8运行环境
参照了:https://blog.csdn.net/smile_from_2015/article/details/80056297 首先下载linux对应的安装包 下载地址:http://www.o ...
- 模型-视图-控制器的C++解释
模型-视图-控制器 (MVC) 并非一种技术,而是软件设计/工程的一个概念.MVC包含三个组成部分,如下图所示 模型 模型直接响应对数据的处理,比如数据库.模型不应依赖其它组成部分,即视图或控制器,换 ...
- Semi-supervised learning for Text Classification by Layer Partitioning
本文是arxiv上一篇较短的文章,之所以看是因为其标题中半监督和文本分类吸引了我.不过看完之后觉得所做的工作比较少,但想法其实也挺不错. 大多数的半监督方法都选择将小扰动施加到输入向量或其表示中,这种 ...