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的更多相关文章

  1. 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  2. 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 数据库 ...

  3. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

  4. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  5. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  6. CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用

    Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...

  7. CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用

    背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...

  8. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  9. 最好的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  10. Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM

    产品清单: 1.整站源码,非编译版,方便进行业务的二次开发 2.通用模块与用户等基础数据的数据库脚本 3.bootstrap3.3.1 AceAdmin模板源码 4.easyui1.3.5源码 5.F ...

随机推荐

  1. SVN服务的模式和多种访问方式 多种访问原理图解与优缺点

    SVN企业应用场景 SVN任是当前企业的主流.git正在发展,未来会成为主流.如果大家精力足够,建议同时掌握. 1.4运维人员掌握版本管理 对于版本管理系统,运维人员需要掌握的技术点: 1.安装.部署 ...

  2. os.path的使用

    os.path 1.返回当前目录 举个例子: (1)给出一个目录名称,返回绝对路径 project_path = "Exercise" path = os.path.dirname ...

  3. react 首页加载loading

    首页加载loading,放在#root里面,代码如下: <!DOCTYPE html> <html lang="en"> <head> < ...

  4. mac chrome 浏览器开启允许跨域

    在控制台输入下面代码: open -n /Applications/Google\ Chrome.app/ --args --disable-web-security  --user-data-dir ...

  5. 小程序篇- data 数据绑定

    使用wepy框架写小程序, data赋值这里不需要使用this.setData({}),例如: data:{ x:'' }, 在你为data里面的数据进行绑定的时候,是需要的. 比如data里面你定义 ...

  6. AxMIMS系统开发环境搭建

    系统环境:Windows10, VS2013, Qt5.6.2 64bit 1.CloudCompare2.8.1编译 (shapefilelib1.3,geos3.6.1) 2.PCL-1.8.0- ...

  7. 1: 创建一个sap demo项目:

    1:  创建一个项目:

  8. word2vec模型评估方案

    1.word2vec参数详解 · sentences:可以是一个·ist,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建.· sg: 用于设置训练算 ...

  9. 【LeetCode每天一题】Find First and Last Position of Element in Sorted Array(找到排序数组中指定元素的开始和结束下标)

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  10. JS控制文本框只能输入数字 \保留小数点后两位

    <input type="text" placeholder="保留到小数点后两位" maxlength="200" onkeyup= ...