常用的函数方法与包的调用

# 登陆视图函数
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之小结的更多相关文章

  1. django常见问题小结,细节容易忽视

    中文URL:这个其实是很常识的东西,但是之前做web一直没注意过,在使用HttpResponseRedirect的时候,如果Redirect的URL中带中文的话,会报UnicodeEncodeErro ...

  2. django 单元测试小结

    测试的场景 框架Django1.8 测试工具 unittest, 要记得给test设置一个独特的settings. 测试请求 也就是测试整个view部分 官方案例 其中可能会遇到登录,或者时sessi ...

  3. django 知识点小结

    以下内容为用django写blog中的一些知识点,权当复习. 一.定义view 1.get_object_or_404()是用get()查询数据,如果不存在就直接返回404 参数: get_objec ...

  4. django 编程小结

    1.增删改查 add obj = Obj(atr=atr..) obj.save() update: __dict__ 遍历 del: 根据id列表删除 query: 首次查询: 直接跳转至页面,前端 ...

  5. django使用小结

    一.静态文件的使用 二.csrf跨站访问安全机制设置 三.MODEL模型使用

  6. django单元测试

        django 单元测试小结 django 测试 从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合 ...

  7. Python框架之Django学习笔记(五)

    第一个Django网页小结 进来的请求转入/hello/. Django通过在ROOT_URLCONF配置来决定根URLconf. Django在URLconf中的所有URL模式中,查找第一个匹配/h ...

  8. Django学习系列5:为视图编写单元测试

    打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...

  9. Django rest framework之序列化小结

       最近在DRF的序列化上踩过了不少坑,特此结合官方文档记录下,方便日后查阅. [01]前言    serializers是什么?官网是这样的”Serializers allow complex d ...

随机推荐

  1. 123457123456#0#-----com.ppGame.huaHua65--前拼后广--儿童填色-pp

    com.ppGame.huaHua65--前拼后广--儿童填色-pp

  2. mysql的驱动类com.mysql.jdbc.Driver过时了,需要用com.mysql.cj.jdbc.Driver代替

    springboot项目整合mybatis,配置文件如下: server: port: 8081 mybatis: config-location: classpath:mybatis/mybatis ...

  3. elk问题汇总

    解决方案: https://blog.51cto.com/michaelkang/2298689?source=dra 使用postman.  PUT请求, JSON格式

  4. 任务调度之Quartz.Net可视化界面

    上一篇关于任务调度Quartz.Net的文章中介绍了其三个核心对象IScheduler.IJob和ITrigger,我们已经知道了其基本的使用方法,可以在控制台当中运行监控.但是在实际中我们往往需要有 ...

  5. [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染

    Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...

  6. crontab每小时运行一次

    先给出crontab的语法格式 对于网上很多给出的每小时定时任务写法,可以说绝大多数都是错误的!比如对于下面的这种写法: 00 * * * * #每隔一小时执行一次 00 */1 * * * #与上面 ...

  7. java当中JDBC当中Scrollable和Updatable ResultSet的用法和Helloworld例子

    [学习笔记] 在前面的jdbc的Helloworld程序当中,我们接触了最简单的 Statement.那种Statement的光标只能向前移.意思就是访问完2,只能继续访问3,不能再回过头来访问1.还 ...

  8. STM32之串口编程步骤

    串口编程步骤(非中断)如下: 使能GPIO时钟 使能串口时钟 配置TXD为复用功能+推挽   (站在STM32芯片角度) 配置RXD为复用功能+上拉   ( 站在STM32芯片角度) 设置数据帧 OV ...

  9. C++_对象数组与对象指针

    对象数组与对象指针 1. 对象数组 所谓对象数组是指每一数组元素都是对象的数组, 也就是说,若一个类有若干个对象,则把这一系列的对象用一个数组来存放. 对象数组的元素是对象, 不仅具有数据成员,而且还 ...

  10. 【Qt】Qt5.12连接MySQl5.7(亲自测试成功)

    目录 00. 目录 01. Qt5.12连接MySQL5.7测试代码 02. Qt5.12连接MySQL5.7问题描述 03. 解决办法 04. 结果测试 05. 打赏 00. 目录 01. Qt5. ...