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

# 登陆视图函数
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. Swift4.0复习控制流语句

    1.do语句块: Swift编程语言中可使用 do 语句块作为类似C语言中的一般语句块进行使用.与C语言的语句块类似,Swift中的 do 语句块单独作为一个作用域,该语句块中声明的局部对象在其外部将 ...

  2. POJ 3903 Stock Exchange 最长上升子序列入门题

    题目链接:http://poj.org/problem?id=3903 最长上升子序列入门题. 算法时间复杂度 O(n*logn) . 代码: #include <iostream> #i ...

  3. robot:截图关键字

    参考: https://www.cnblogs.com/hong-fithing/p/9656221.html--python https://blog.csdn.net/weixin_4315628 ...

  4. Linux习题1

    1. GUN的含义是:     GNU's Not UNIX    . 2. Linux一般有3个主要部分:内核.命令解释层.实用工具. 3.POSIX是可携式操作系统接口的缩写,重点在规范核心与应用 ...

  5. 基于libuv的TCP设计(二)

    一.本人设想的TCP服务器有如下特性: 1.启动服务,一直监听端口. 2.有新连接(客户端)就通知用户.并把连接接收到的数据回调给用户. 3.客户端连接上后用户可在任意时间发送数据给它. 4.客户端断 ...

  6. 【GStreamer开发】GStreamer基础教程06——媒体格式和pad的Capabilities

    目标       Pad的Capabilities是一个GStreamer element的基础,因为framework大部分时间是自动处理的,所以我们几乎感觉不到它的存在.本教程比较偏向原理,介绍了 ...

  7. MySQL(四)InnoDB中一棵B+树能存多少行数据

    一.InnoDB一棵B+树可以存放多少行数据?(约2千万) 我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛.在计算机中磁盘存储数据最小单元是扇区,一个扇 ...

  8. PHP 数据库连接

    $db = new MySQLi("localhost","root","123","php0307"); !mysql ...

  9. C++拾忆

    1.引用 1.建立引用的时候,必须初始化,引用一旦初始化,就和一个对象绑定,不能再修改为其他对象的引用 2.对引用取地址,和对原始对象取地址,是同一个地址 3.不能用做引用的:void.数组 2.内联 ...

  10. 原生js 实现better-scroll效果,饿了么菜单内容联动,即粘即用

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...