ORM some
1 --
增 models.表名(类).objects.create(字段1=值,字段2=值)
查 models.表名(类).objects.get(pk = 3)
models.表名(类).objects.filter(pk = 3)
models.表名(类).objects.all()
删 models.表名(类).objects.get(pk = 3).delete()
models.表名(类).objects.filter(pk = 3).delete()
改 obj= models.表名(类).objects.get(pk = 3)
obj.name = new_name
obj.save()
2 --
外键
创建外键:
字段名 = models.ForeignKey('关联表名'',on_delete=models.CASCADE)
加 ' ' 是通过反射寻找, 同级删除
3 -- 过滤器
语法
{{value|filter_name:参数 }}}
变量 过滤的 显示的 with -- 用法
{% with 变量 as 变量新名字%} 自定义 过滤器 --
filter -- {% load py文件名 %} {{ value|过滤器名称 }}} simple_tag(*args,**kwargs) -- load {% 函数名 参数 %} inclusion_tag('xxx.html') -- load {% 函数名 参数 %}
-- -- -- --
# filter
@register.filter
def x1(value,arg='xxx'):
return True
# simple_tag
@register.simple_tag
def x2(*args,**kwargs):
return True
@register.inclusion_tag('li.html')
def show_li(num):
return {'num':range(num)}
4 -- 装饰器 - 闭包函数 - 在不改变原函数的代码和调用方式的基础上,给原函数增加功能
def wrapper(func):
def inner(*args,**kwargs):
# 原函数执行之前
ret = func(*args,**kwargs)
# 原函数执行之后
return ret
return inner @wrapper # func1 = wrapper(func1)
def func1():
print('func1')
5 - CBV
from django.views import View
class AddPublisher(View):
def get(self,request):
return response
def post(self,request):
return response
使用 -- url(r'^add_publisher/', views.AddPublisher.as_view()),
CBV 流程
程序运行到 类.as_view() 执行,
得到view函数
请求到来的时候,执行view,实例化类-->self
self.request = request
执行self.dispatch(request,*args,**kwargs)
判断请求方式是否被允许
允许: 反射获得相应请求方式的方法 -->Handler
不允许: self.http_method_not_allowed ——》handler
执行 handler--> 返回响应
加装饰器 FBV 直接加装饰器就行
CBV
from django.utils.decorators import method_decorator
# 1。加载某一个方法上
@method_decorator(timer)
def get(self, request): # 2. 加载dispatch方法上面 所有映射的方法都有了
@method_decorator(timer)
def dispatch(self, request, *args, **kwargs): # 3. 加在类上
@method_decorator(timer, 'post')
@method_decorator(timer, 'get')
class AddPublisher(View):
6 -- request 对象
print(request.method) # 请求方式 GET POST PUT
print(request.GET) # URL携带的参数 { ‘name’: ['alex'] } [] .get('name')
print(request.POST) # POST请求提交的数据 { ‘name’: ['alex'] } .getlist()
print(request.path_info) # 路径信息 不包含ip和端口 参数
print(request.FILES)
print(request.META)
print(request.COOKIES)
print(request.session) print(request.get_host())
print(request.get_full_path()) # 路径信息 不包含ip和端口 带参数
print(request.is_ajax()) # 判断是否是ajax请求
7 -- response 对象
HttpResponse('字符串 ') ——》 页面展示 字符串
render(request,'html文件名', { k1:v1 }) ——》 返回一个完整HTML页面
redirect(’要跳转的地址‘) ——》重定向 Location : 地址
JsonResponse:
from django.http import JsonResponse def json_data(request):
data = {'id': 11, 'name': 'alex'}
l1 = ['alex', 'peiqi'] return JsonResponse(l1, safe=False) # Content-Type: application/json
8 -- 路由
分组 -- url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog), 获取到的参数位子参数传递给视图函数
命名分组 -- url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog), 参数 关键字 传递给视图函数
include -- 路由分配
from django.conf.urls import url, include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),
]
9 -- 视图 views.py 就是业务逻辑
10 -- namespace 反向解析
url 反向解析
url(r'^web/$',views.web,name='web')
视图中 - reverse('web')
模板中 - { % url 'web' %}
namespace -- 命名空间
url('app01/', include('app01.urls', namespace='app01')),
url('app02/', include('app02.urls', namespace='app02'))
11 - 聚合 aggregate
from django.db.models import Max, Min, Sum, Count, Avg # aggregate()是QuerySet 的一个终止子句
ret = models.Book.objects.all().aggregate(max=Max('price'), min=Min('price')) # {} ret = models.Book.objects.filter(publisher__name='得劲出版社').aggregate(max=Max('price'), min=Min('price')) # {}
分组 annotate(注释)
# 统计每一本书的作者个数
ret = models.Book.objects.annotate(Count('author')) # xxx # 统计出每个出版社买的最便宜的书的价格
ret = models.Publisher.objects.annotate(Min('book__price')).values() ret = models.Book.objects.values('publisher__name').annotate(Min('price')) ret = models.Book.objects.values('publisher').annotate(min=Min('price')).values('publisher__name', 'min', ) # 统计不止一个作者的图书
ret = models.Book.objects.annotate(count=Count('author')).filter(count__gt=1) # 根据一本图书作者数量的多少对查询集 QuerySet进行排序
ret = models.Book.objects.annotate(count=Count('author')).order_by('-count') # 查询各个作者出的书的总价格
ret = models.Author.objects.annotate(Sum('books__price')).values()
F 和 Q
F -- 动态获取字段的值
from django.db.models import F, Q ret = models.Book.objects.filter(sale__gt=F('kucun')).values() # 两个字段的值进行比较 # book_obj = models.Book.objects.get(pk=1)
# book_obj.price = 900
# book_obj.save() models.Book.objects.all().update(sale=F('sale') * 2) # 给一个字段的所有值都更新
Q 条件
# ~ 非
# | 或
# & 与
# Q(id__lt=2) 即为一个条件
ret = models.Book.objects.filter(~Q(Q(id__lt=2) | Q(id__gt=4)) & Q(id__gt=3))
事务
from django.db import transaction try:
with transaction.atomic():
# ORM 语句
models.Publisher.objects.create(name='裤夹尾出版社')
# ..... 一系列操作 except Exception as e:
print(e)
只要有一个 ORM 语句错误都不会成功执行
12 -- cookie 和 session
cookie 保存在浏览器上的一个个键值对 特点 -- 服务器让浏览器设置的, 浏览器保存在本地 有权利不设置,下次访问相同地址时候携带对应的cookie 设置 cookie
ret= redirect('index')
ret.set_cookie('键','值')
获取 request.cookies 加密设置 ret.set_signed_cookie('键','值','盐')
获取 request.get_signed_cookie(键,salt='盐',default='')
超时时间 max_age=时间
session -- 保存在 服务器上的 一组组键值对,依赖于cookie
为什么用session?
cookie 保存在浏览器上不安全
cookie 在请求头 传递数据 大小和数量有限制
设置:
request.session['键'] = 值
获取:
request.session.get('键') 删除session:
ret =redirect('/login/')
ret.delete_cookie('user')
del request.session['k1'] request.session.delete() # 删除当前回话的所有session数据,不删除cookie
request.session.flush() # 删除当前回话的所有session数据,删除cookie
ORM some的更多相关文章
- 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了
前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...
- UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?
选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维
前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用
Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用
背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 最好的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM
产品清单: 1.整站源码,非编译版,方便进行业务的二次开发 2.通用模块与用户等基础数据的数据库脚本 3.bootstrap3.3.1 AceAdmin模板源码 4.easyui1.3.5源码 5.F ...
随机推荐
- (4.24)sql server变量中set与select的区别
SET vs SELECT是SQL极客之间讨论的常见话题,也是最受欢迎的面试问题之一.SET用于为变量赋值,SELECT用于赋值或从变量/ table / view等中选择值. 让我们看看在不同场景中 ...
- 20181223 python 使用Beautiful Soup
(这篇,没什么营养价值) 怎么说呢! 爬虫吧!把html页面进行解析得到有效数据,而beautiful soup 能快速格式化页面再进行方法对数进行提取,存入想要存入的DB中. from bs4 im ...
- 20181017 PL/SQL 记录
1. 配置DB 链接文件,帮助中找到tnsnames.ora文件路径,进行注册数据库信息,登陆即可. 这只是个客户端,具体服务器段数据库情况不清楚. 2.写法区别PL/SQL 和SQL 变量定义 赋值 ...
- SQL SERVER 2016研究一
一.安装SQL Server 2016 安装检查提示异常: 安装补丁: 根据系统判断补丁安装顺序,按顺序安装 Windows server 2012 R2 安装SQL补丁如下以及JDK: 安装完成 二 ...
- 【剑指offer】两个链表的第一个公共结点
一.题目: 输入两个链表,找出它们的第一个公共结点. 二.思路: 思路一:模拟数组,进行两次遍历,时间复杂度O(n2) 思路二:假定 List1长度: a+n List2 长度:b+n, 且 a&l ...
- vue 给url 中文参数 添加编码解码
// 解码用 decodeURIComponent(str) // 编码用 encodeURIComponent(str)
- 开启Laravel之旅的标准姿势
1.github下载最新的laravel https://github.com/laravel/laravel 2.下载到本地,改名,composer install,安装项目的依赖包 compose ...
- windows系统上利用putty通过SSH连接亚马逊AWS服务器
1. 找到在购买亚马逊的AWS服务器时保存的密钥文件(假设为abc.pem). 2.打开PuTTYgen,如下图,点击图中1处的“load”,找到abc.pem文件所在的位置,并选择abc.pem,确 ...
- vim 常用
Format JSON :%!python -m json.tool 1. define custom function and use it define function in .vimrc fu ...
- (转载)Spring定时任务的几种实现
spring框架定时任务 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerT ...