django_day05

内容回顾

内容回顾

  1. 对应关系

    类-------表

    对象-----数据行

    属性------字段

  2. django使用mysql数据库流程

    1. 创建一个mysql数据库

    2. 在settings中配置数据库

      1. ENGINE mysql
      2. NAME 数据库名称
      3. HOST 127.0.0.1
      4. PORT 3306
      5. USER 用户名
      6. PASSWORD 密码
    3. 告诉django使用pymysql模块连接mysql模块

      1. 写在与项目同名的目录下的__init__.py
      2. import pymysql
      3. pymysql.install_as_MySQLdb()
    4. 在app下的models.py中写类

      from django.db import models
      class Person(models.Model):
      name = models.CharField(max_length=32) #varchar(32)
    5. 执行数据库迁移的命令

      python manage.py makemigrations
      python manage.py migrate

    常用字段

    AutoField   自增字段 primary=True
    CharField 字符串 max_length
    BooleanField 布尔类型
    IntegerField 整型 -21亿 --- +21亿 10位 不能存手机号
    DateField
    DateTimeField auto_now = True 新增和编辑时保存当前时间
    auto_now_add = True 新增时保存当前的时间
    TextField 文本类型

    字段的参数

    null  数据库可以为空
    blank 用户输入可以为空
    unique 唯一约束
    verbose_name 提示信息
    choices 让用户选择的数据 choices=((1,'男'),(2,'女'))
    default 默认值
    db_column 列名

    必知必会13条

    返回对象列表
    all 查询所有的数据
    filter 查询所有满足条件的数据
    exclude 查询所有不满足条件 的数据
    values 查询数据的字段和值[ {} ]
    values_list 查询数据的值 [()]
    order_by 排序 默认升序 - 多字段排序age id
    reverse 对已经排好序的queryset翻转
    distinct 去重 返回对象
    get 获取有且唯一的对象
    first
    last 返回布尔值
    exists 数字
    count

路由

url(r'^publisher_list/$',views.publisher_list)
url(r'^(publisher|book|author)_del/$',views.delete) 正则
\d \w + ? . * r'^app01/publisher_list/$'

URL的命名和反向解析

静态路由
url(r'^publisher_list/$',views.publisher_list,name=pub) 模板中
'{% url 'pub' %}' --- '/publisher_list/' py文件
from django.shotcuts import reverse
reverse('pub') --- '/publisher_list/' 分组
动态路由
url(r'^publisher_list/(\d+)/$',views.publisher_list,name=pub) 模板中
{% url 'pub' 5 %} '/publisher_list/5/'
py文件
from django.shotcuts import reverse
reverse('pub',args=(5,)) --- '/publisher_list/5/' 命名分组 可以按照命名传参
动态路由
url(r'^publisher_list/(?P<pk>\d+)/$',views.publisher_list,name=pub) 模板中
{% url 'pub' 5 %} '/publisher_list/5/'
{% url 'pub' pk=5 %} '/publisher_list/5/'
py文件
from django.shotcuts import reverse
reverse('pub',args=(5,)) --- '/publisher_list/5/'
reverse('pub',kwargs={'pk':'5'} --- '/publisher_list/6/'

外键

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")

import django

django.setup()
from app01 import models #基于对象的查询
#正向查询
book_obj = models.Book.objects.get(pk=1)
# print(book_obj.pub) #关联的出版社对象
# print(book_obj.pub_id) #关联的出版社id #反向查询
pub_obj = models.Publisher.objects.get(pk=1)
print(pub_obj)
# print(pub_obj.book_set,type(pub_obj.book_set)) #类名小写 set 关联所有对象
# print(pub_obj.book_set.all())
#指定related_name=‘books’
# print(pub_obj.books,type(pub_obj.books)) #类名小写 set 关联所有对象
# print(pub_obj.books.all()) #基于字段查询
ret = models.Book.objects.filter(pub__name__contains='出版社1') # #不指定related_name='books'
# ret = models.Publisher.objects.filter(book__name='书1') # #指定related__name='books' 不指定related_query_name='book'
# ret = models.Publisher.objects.filter(books__name='书1') #指定related_query_name='book'
# ret = models.Publisher.objects.filter(book__name='书1')
# print(ret) # set add create 只有对象 没有id
pub_obj.books.set(models.Book.objects.filter(id__in=[1,2])) # remove clear 不能用

多对多

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")

import django

django.setup()
from app01 import models
author_obj = models.Author.objects.get(pk=1) print(author_obj.books) #关系管理对象
print(author_obj.books.all()) #所关系对象集合 book_obj = models.Book.objects.get(pk=2)
# print(book_obj.author_set.all())
print(book_obj.authors.all()) # ret = models.Book.objects.filter(authors__name='李世林')
# ret = models.Author.objects.filter(books__name='书2') #关系管理对象的方法
#all 查询所有的对象
#set 设置多对多 的关系 [id,id]
# author_obj.books.set([1,2])
#
# author_obj.books.set(models.Book.objects.filter(id__in=[3,4])) #add 添加多对多关系
# author_obj.books.add(1,2)
# author_obj.books.add(*models.Book.objects.filter(id__in=[5,6]))#列表打散 变成对象 #remove 添加多对多的关系
# author_obj.books.remove(3,4)
# author_obj.books.remove(*models.Book.objects.filter(id__in=[5,6])) #clear 清空多对多的关系
# author_obj.books.clear() # create 新建一个对象和当前的对象建立关系
# author_obj.books.create(name='sdawd',pub_id='1')
ret= book_obj.authors.create(name='adadadfdcvxdc')
print(ret)

神奇的下划线

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")

import django

django.setup()
from app01 import models
ret = models.Person.objects.filter(pid__lt=5) #less than 小于
ret = models.Person.objects.filter(pid__gt=5) #greater than 大于
ret = models.Person.objects.filter(pid__lte=5) #less than equal 小于等于 ret = models.Person.objects.filter(pid__range=[1,6]) #左右都包含 范围
ret = models.Person.objects.filter(pid__in=[1,5,6]) #左右都包含 成员判断 ret = models.Person.objects.filter(name__contains='lsl') # like 模糊查询
ret = models.Person.objects.filter(name__icontains='lsl') # like 模糊查询 忽略大小写
ret = models.Person.objects.filter(name__startswith='l') # like 模糊查询 以什么开头
ret = models.Person.objects.filter(name__istartswith='l') # like 模糊查询 以什么开头 忽略大小写
# ret = models.Person.objects.filter(name__endwith='l') # like 模糊查询 以什么结尾
# ret = models.Person.objects.filter(name__iendwith='l') # like 模糊查询 以什么结尾 忽略大小写 ret = models.Person.objects.filter(birth__year='2020') # like 模糊查询 以什么结尾 忽略大小写
ret = models.Person.objects.filter(birth__month='1') # like 模糊查询 以什么结尾 忽略大小写
ret = models.Person.objects.filter(birth__day='1') # like 模糊查询 以什么结尾 忽略大小写
ret = models.Person.objects.filter(birth__contains='-02-') # like 模糊查询 以什么结尾 忽略大小写 ret = models.Person.objects.filter(name__isnull=True) #字段为空 print(ret)

聚合与分组

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")
import django
django.setup()
from app01 import models
from django.db.models import Avg, Sum, Max, Min, Count
#aggregate 终止子句
ret = models.Book.objects.all().aggregate(Avg("price"))# 返回字典 #{'price__avg': 205.483333}
ret = models.Book.objects.all().aggregate(average_price=Avg('price'))# 返回字典{'average_price': 205.483333}
ret = models.Book.objects.all().aggregate(Avg("price"), Max("price"), Min("price"))# 返回字典{'price__avg': 205.483333, 'price__max': Decimal('999.00'), 'price__min': Decimal('9.90')}
ret = models.Book.objects.aggregate(Avg("price"), Max("price"), Min("price"))# 返回字典{'price__avg': 205.483333, 'price__max': Decimal('999.00'), 'price__min': Decimal('9.90')}
ret = models.Book.objects.filter(id__gt=2).aggregate(Avg("price"), Max("price"), Min("price"))# 返回字典{'price__avg': 205.483333, 'price__max': Decimal('999.00'), 'price__min': Decimal('9.90')} print(ret) #分组 group_by #统计每一本书的作者个数
#annotate注释的意思 添加额外的信息
ret= models.Book.objects.annotate(Count('authors')).values()
for i in ret:
print(i) ##统计出每个出版社买的最便宜的书的价格
ret = models.Publisher.objects.annotate(Min('book__price')).values()
#按照pub_id pub_name分组
ret = models.Book.objects.values('pub','pub__name').annotate(Min('price')) publisher_list = models.Publisher.objects.annotate(min_price=Min("book__price"))
for i in ret:
print(i) #统计不止一个作者的图书
ret = models.Book.objects.annotate(count=Count('authors')).filter(count__gt=1)
print(ret) #根据一本图书作者数量的多少对查询集 QuerySet进行排序
ret = models.Book.objects.annotate(count=Count('authors')).order_by('-count')
print(ret)
#查询各个作者出的书的总价格 ret = models.Author.objects.annotate(sum=Sum('books__price')).values()
ret = models.Book.objects.values('authors','authors__name').annotate(sum=Sum('price'))
for i in ret:
print(i)

F和Q

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")
import django
django.setup()
from app01 import models
from django.db.models import Avg, Sum, Max, Min, Count,F,Q ret = models.Book.objects.filter(sale__gt=F('repertory')) #where 'sale' > 'repertory' ret = models.Book.objects.filter(id__lte=3).update(sale=F('sale')*2 + 12) ret = models.Book.objects.filter(Q(id__lt=3)|Q(id__gt=5)) #或者的关系
ret = models.Book.objects.filter(Q(Q(id__lt=3)|Q(id__gt=5))&Q(name__startswith='lsl')) #与的关系
# ret = models.Book.objects.exclude(id__gte=3,id__lte=5)
"""
Q() | 或者 & 并且 ~ 非 """ print(ret)

事务

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")
import django
django.setup()
from app01 import models
from django.db.models import Avg, Sum, Max, Min, Count,F,Q
from django.db import transaction try:
with transaction.atomic():
#一系列的操作
models.Book.objects.all().update(repertory=F('repertory') - 10)
int('sss')
models.Book.objects.all().update(sale=F('sale') + 10)
except Exception as e:
print(e)

cookie

  1. 保存在浏览器本地上的一组组键值对

  2. 特性:

    1. 由服务器让浏览器进行设置的
    2. cookie信息保存在本地浏览器 有权不保存
    3. 浏览器再次访问时自动携带对应的cookie
  3. django中操作cookie

    #设置cookie
    request.set_cookie(key,value) # Set-Cookie: is_login=1
    response.set_signed_cookie(key, value,salt='s28')#加密cookie #获取
    request.COOKIES.get(key)#请求头 Cookie : is_login = 1;
    request.get_signed_cookie(key,salt='s28',default='')#加密cookie #删除cookie 设置cookie值为空 超时时间为0
    response.delete_cookie(key)
  4. 参数

    • key, 键
    • value='', 值
    • max_age=None, 超时时间
    • expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
    • path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
    • domain=None, Cookie生效的域名
    • secure=False, https传输
    • httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

django_day05的更多相关文章

随机推荐

  1. MAUI模板项目闪退问题

    MAUI模板项目闪退问题 在MAUI最初发布的时候就曾创建过几个模板项目进行体验过,没遇到什么坑.由于最近需要开发针对餐饮行业的收银机(安卓系统)开发一款应用,这种收银机一般配置不咋滴,系统版本和性能 ...

  2. 物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合

    项目全部代码地址:https://github.com/Tom-shushu/work-study.git (mqtt-emqt 项目) 先看我们最后实现的一个效果 1.手机端向主题 topic111 ...

  3. Java创建数据库新建表及初始化表

    方法一 package com.crt.openapi; import java.sql.DriverManager;import java.sql.ResultSet;import java.io. ...

  4. redis相关知识点

    redis 的相关知识点 启动 启动代码 redis-cli -a 密码 通用命令 expire: 设置有效期 expire name 10 key key * 相关数据类型 String set:添 ...

  5. 重学ES系列之新增的几个循环方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. SAP Web Dynpro-版本管理

    您可以使用版本管理来管理对象的旧版本,比较版本,也可以重置它们. 在版本管理中,您可以存储ABAP开发对象的不同版本. 在ABAP工作台中,您可以比较不同版本的- 视图 视窗 控制器 您也可以存储对象 ...

  7. 使用MySqlBulkLoader批量插入数据

    最近在项目中遇到插入几万.几十万.几百万的数据到MYSQL数据库,使用EF插入会发现插入速度非常慢的场景, 数据量非常大时EF插入需要几十分钟,甚至几个小时,这样子的速度肯定不是我们所期望的. 后面经 ...

  8. 记一次排查线上MySQL死锁过程,不能只会curd,还要知道加锁原理

    昨晚我正在床上睡得着着的,突然来了一条短信. 啥,线上MySQL死锁了,我赶紧登录线上系统,查看业务日志. 能清楚看到是这条insert语句发生了死锁. MySQL如果检测到两个事务发生了死锁,会回滚 ...

  9. ArrayList分析1-循环、扩容、版本

    ArrayList分析1-循环.扩容.版本 转载请注明出处 https://www.cnblogs.com/funnyzpc/p/16407733.html 前段时间抽空看了下ArrayList的源码 ...

  10. ASP.NET Core 根据环境变量支持多个 appsettings.json配置文件 (开发和生产)

    新建一个项目,web根目录会出现一个 appsettings.json  配置文件, 此时添加--新建项,输入  appsettings.Development.json 再新增一个,appsetti ...