重定向

  • 什么是重定向

    • 向新的访问地址发送请求(服务器端)
  • 语法
    • from djangp.htmmp import HttpResponseRedirect
    • return HttpResponseRedirect(url)

ORM操作

  • 将数据表中所有人的年龄都增加10岁

    • update index_author set age=age+10
    • Author.objects.all().update(age=10)

F()操作

  • 取出某个字段的值再做操作
  • 例如
    • 浏览量自增
    • 所有人的年龄都增加10岁
  • 作用
    • 在执行操作中,获取某列的值时使用
  • 语法
    • F(‘列名’)
    • 导入 from django.db.models import F
    • 使用 Author.objects.all().update(age=F('age')+10)
    • 注意:
    • F必须用于某个操作中
    • 脱离操作F无法使用

实战案例源码

from django.db.models import F # 作者列表 def authorList(request): # authors = Author.objects.all() # authors = Author.objects.filter(isActive=True) # 所有人的年龄都增加10岁 Author.objects.all().update(age=F('age') + 10) authors = Author.objects.filter(isActive__exact=True) return render(request, 'authorList.html', { 'authors': authors, }) 
Python
Copy

Q()操作

  • Author.objects.filter(id=1,age=35) 且操作
  • 那么或操作如何处理呢,这个时候就需要用到Q()了
  • 作用
    • 在查询条件中,可以完成或(or)的操作
  • 语法
    • from django.db.models import Q
    • Q(表达式)|Q(表达式)
  • 案例
    • 查询作者表中id=3或者年龄大于等于70的信息
    • Author.objects.filter(Q(id__exact=3)|Q(age__gt=70))
    • select *from index_author where id=3 or age>=70

实战案例源码

# 作者列表
def authorList(request): # authors = Author.objects.all() # authors = Author.objects.filter(isActive=True) # 所有人的年龄都增加10岁 # Author.objects.all().update(age=F('age') + 10) # 查询id=3 或年龄大于等于80岁的人 authors = Author.objects.filter(Q(id__exact=3) | Q(age__gt=80), isActive__exact=True) # authors = Author.objects.filter(isActive__exact=True) return render(request, 'authorList.html', { 'authors': authors, }) 
Python
Copy

原生的数据库操作方法

  • 主要分两个方法

    • 查询
    • 增删改

查询

  • 函数

    • raw(原生sql语句)
  • 语法
    • Entry.objects.raw(sql)
  • 返回
    • 返回的是列表嵌套对象的数据集

原生sql语句实战案例源码

# 作者列表
def authorList(request): # authors = Author.objects.all() # authors = Author.objects.filter(isActive=True) # 所有人的年龄都增加10岁 # Author.objects.all().update(age=F('age') + 10) # 查询id=3 或年龄大于等于80岁的人 # authors = Author.objects.filter(Q(id__exact=3) | Q(age__gt=80), isActive__exact=True) # 原生sql语句查询 authors=Author.objects.raw('select *from index_author') # authors = Author.objects.filter(isActive__exact=True) return render(request, 'authorList.html', { 'authors': authors, }) 
Python
Copy

增删改的方法

  • with connection.cursor() as cursor
  • sql='delete from author whe id=1'
  • cursor.execute(sql)
  • return HttpResponse("...")

实战案例源码

 # 原生的增删改查询# from django.db.models import connection# with connection.cursor() as cursor:# sql='....' # cursor.execute(sql) 
Python
Copy

使用后台管理Models

  • 后台的配置

    • 登录地址 : 主路由/admin
  • 创建后台管理员
    • python manage.py createsuperuser
    • 权限管理的分组

基本管理

  • 在应用中的admin.py中注册要管理的实体类
  • admin.py
    • 作用
    • 注册需要管理的models
    • 只有再次注册的models才允许被管理
  • 注册models
    • 导入模型 from .models import Author,Publisher,Book
    • 注册模型 admin.site.register(Author)
    • 一条语句只能注册一个模型
    • 要注册多个模型需要分多次注册

注册管理模型实战案例源码

from django.contrib import admin
from .models import Author, Publisher, Book # Register your models here. admin.site.register(Author) admin.site.register(Book) admin.site.register(Publisher) 
Python
Copy

修改models.py处理显示内容

  • 在models.py中为各个class追加

    • def __str__(self):retur self "当前类的主要属性名"

实战案例源码

# 出版社
class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=20) city = models.CharField(max_length=20) country = models.CharField(max_length=20) website = models.URLField() def __str__(self): return self.name # 作者 Author:name age email class Author(models.Model): name = models.CharField(max_length=32) age = models.PositiveSmallIntegerField() email = models.EmailField(null=True) # 增加一个状态列,来表示用户是启用的还是禁用的 isActive = models.BooleanField(default=True) def __str__(self): return self.name # 图书 Book:title publicate_date class Book(models.Model): title = models.CharField(max_length=32) publicate_date = models.DateField(auto_now=True) def __str__(self): return self.title 
Python
Copy

通过models类的内部类Meta定义每个类的展现形式

class Author(models.Model): ... class Meta: #常用的属性 db_table = '作者' #指定改实体类对应到的表的名称 verbose_name= '作者' #定义该实体类在后台管理的列表页中的名称(单数形式) # 修改后台表名用以下一个属性即可 verbose_name_plural=verbose_name #效果同上,但是是复数形式 ordering= #指定实体数据列表页中的排序规则 quzh,默认升序,降序添加负号 
Python
Copy

修改后台管理显示表名实战案例源码

# 出版社
class Publisher(models.Model): name = models.CharField(max_length=30, verbose_name='出版社名称') address = models.CharField(max_length=20, verbose_name='地址') city = models.CharField(max_length=20, verbose_name='所在城市') country = models.CharField(max_length=20, verbose_name='所在国家') website = models.URLField(verbose_name='官网') def __str__(self): return self.name class Meta: verbose_name_plural = '出版社' ordering = ['city', 'name'] # 作者 Author:name age email class Author(models.Model): name = models.CharField(max_length=32, verbose_name='姓名') age = models.PositiveSmallIntegerField(verbose_name='年龄') email = models.EmailField(null=True, verbose_name='邮箱') # 增加一个状态列,来表示用户是启用的还是禁用的 isActive = models.BooleanField(default=True) def __str__(self): return self.name class Meta: verbose_name_plural = '作者' # 排序 年龄降序 id升序 ordering = ['-age', 'id'] # 图书 Book:title publicate_date class Book(models.Model): title = models.CharField(max_length=32, verbose_name='书名') publicate_date = models.DateField(auto_now=True, verbose_name='出版日期') def __str__(self): return self.title class Meta: verbose_name_plural = '图书' ordering = ['-publicate_date', 'title'] 
Python
Copy

高级管理

  • 在admin.py中创建高级管理类

    • 定义EntryAdmin,继承自admin.ModelAdmin
    • class AuthorAdmin(admin.ModelAdmin):
  • 注册高级管理类
    • admin.site.register(Author,AuthorAdmin)

ModelAdmin的所有属性(摘录自Django源码)

class ModelAdmin(BaseModelAdmin): "Encapsulates all admin options and functionality for a given model." list_display = ('__str__',)#要显示的字段 list_display_links = ()#要设置为链接的字段 list_filter = ()#过滤的字段 list_select_related = False list_per_page = 100 list_max_show_all = 200 list_editable = () search_fields = () date_hierarchy = None save_as = False save_as_continue = True save_on_top = False paginator = Paginator preserve_filters = True inlines = [] # Custom templates (designed to be over-ridden in subclasses) add_form_template = None change_form_template = None change_list_template = None delete_confirmation_template = None delete_selected_confirmation_template = None object_history_template = None popup_response_template = None # Actions actions = [] action_form = helpers.ActionForm actions_on_top = True actions_on_bottom = False actions_selection_counter = True checks_class = ModelAdminChecks 
Python
Copy

定制高级管理信息

  • list_display

    • 作用
    • 指定在列表页中能够显示的字段
    • 参数
    • 元组 list_display = ('name', 'age', 'email')
    • 列表 list_display = ['name', 'age', 'email']
    • 两种方式的显示效果在后台完全一样
  • list_display_links
    • 作用
    • 指定在列表中能够连接到详情页的字段们
    • 参数
    • 由属性名称组成的元组或列表
    • 必须出现在list_display的取值中
    • list_display_links = ['name', 'age', 'email']
  • list_editable
    • 作用
    • 指定在列表页中就允许被编辑的字段们
    • 参数
    • 取值不能出现在list_display_links中
    • 但是必须出现在list_display中
    • list_editable = ['age', 'email']
  • search_fields
    • 作用
    • 添加允许被搜索的字段们
    • 参数
    • 元组
    • 列表
    • 案例
    • search_fields = ['name', 'age', 'email']
  • list_filter
    • 作用
    • 在列表的右侧过滤器实现快速筛选
    • 参数
    • 元组
    • 列表
    • 案例
    • list_filter = ['age']
  • date_hierarchy
    • 作用
    • 在列表页的上方增加一个时间选择器
    • 可以根据时间实现快速筛选
    • 参数
    • DateField
    • DateTimeField
    • 案例
    • date_hierarchy = 'publicate_date'
  • fields
    • 作用
    • 在详情页面中指定显示哪些字段,并按照什么样的顺序显示
    • 当只希望部分字段允许被修改的时候可用
    • 取值
    • 元组
    • 列表
    • 案例
    • fields = ('name', 'city')
  • fieldsets
    • 作用
    • 在详情页中,对字段们进行分组显示
    • 注意
    • fieldsets和fields是不能共存的
    • 语法
    • fieldsets=((字段1,字段2),(字段3,字段4…))

分组案例实战源码

class PulisherAdmin(admin.ModelAdmin): # fields = ('name', 'city') fieldsets = ( ('分组1', {'fields': ('name', 'city'), 'classes': ('collapse',)}), ('分组2', {'fields': ('country', 'website')})) list_display = ['name', 'city', 'country', 'website'] 
Python
Copy

关系映射

  • 一对一映射
  • 一对多映射
  • 多对多映射

一对一映射

  • 什么是一对一

    • A表中的一条记录只能与B表中的一条记录相关联
    • 案例
    • 作者和作者详情
    • 图书和图书详情
    • 博客和博客详情
    • 数据库中实现
    • A表:设置主键
    • B表:增加一列,并引用自A表的主键,增加一个唯一约束unique
  • 语法
    • 在关联的两个表中的任何一个类中增加
    • 属性=models.OneToOneField(Entry)
    • 报错问题
    • 添加外键不给默认值会报错
    • 处理方法一般有两种
      • 1 删除原本的数据
      • 2 将外键设置的一个default值或者null=True
  • 查询
    • 正向查询:通过wife找author
    • wife=wife.objects.get(id=1)
    • author=wife.author
    • 反向查询:通过author找wife
    • 技巧 类名小写__
    • author=Author.objects.get(id=3)
    • wife=author.wife
    • wife是Django通过OneToOneField在Author中默认增加的一个隐式属性
      • 看不到
      • 不用自己写
      • 但是可以调用

正向查询作者妻子实战源码

# 查询作者妻子
def authorWife(request): #正向查询 author = Author.objects.get(id=2) wife = author.wife l = ["妻子名字:{}".format(wife.name)] return HttpResponse(l) 
Python
Copy

反向查询妻子老公实战源码

# 查询作者妻子
def authorWife(request): # 正向查询 author = Author.objects.get(id=2) wife = author.wife l = ["妻子名字:{}".format(wife.name)] # 反向查询 wife = Wife.objects.get(id=3) author = wife.author l.append( '<br>老公名字:{}'.format(author.name)) return HttpResponse(l)

转载于:https://www.cnblogs.com/gao_x/p/10509384.html

Django笔记(五)相关推荐

  1. Django笔记总结

    1.web框架的本质 web通信流程 web我们这里指的就是通过浏览器去访问服务端,请求页面或者数据的通信方式,属于B/S架构.就是我们常见的网站.浏览器与服务端的通信流程:浏览器客户端发送一个请求信 ...

  2. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  3. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  4. Django 笔记6 -- 多表查询

    Django 笔记6 – 多表查询 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

  5. Django 笔记5 -- 数据库

    Django 笔记5 – 数据库 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...

  6. Django 笔记4 -- 模板

    Django 笔记4 – 模板 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django官 ...

  7. Django 笔记3 -- URL

    Django 笔记3 – URL Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...

  8. Django 笔记2 -- Django 项目

    Django 笔记2 – Django 入门 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: ...

  9. Django 笔记1 -- 环境搭建

    Django 笔记1 – 环境搭建 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

  10. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

最新文章

  1. 【JavaEE WEB 开发】Tomcat 详解 Servlet 入门
  2. Install Odoo 11 on CentOS 7
  3. Java数组,Wat!
  4. Git常用指令及功能总结
  5. Python程序员30行代码素描表白!网友:花里胡哨
  6. 安装chrome_Chrome 离线安装包下载
  7. SentinelResource注解配置中_客户自定义限流处理_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0046
  8. sap 发送mesage_SAP系统和微信集成的系列教程之九:如何将微信用户发送给微信公众号的内容自动转存到SAP C4C系统...
  9. luoguP3507 [POI2010]GRA 性质 + 动态规划
  10. Find n‘th number in a number system with only 3 and 4
  11. Buddy分配器之释放一页
  12. Redfish协议测试工具–Postman
  13. Reflect的理解
  14. 卖D版的抢Z版的钱,卖Z版的抢我的钱,都是流氓,我向着谁?
  15. 技术分享| 小程序实现音视频通话
  16. 算符优先系列之(二)算符优先关系表
  17. 信号的扩展是因果_信号与系统 怎么判断e(1-t)的时不变和因果性?
  18. sql monitor简介
  19. 3个结点的树和有3个结点的二叉树的所有不同的形态
  20. 地图对接汇总(百度地图)

热门文章

  1. 微软起诉TomTom,Linux牵扯其中
  2. Cross-Scale Cost Aggregation for Stereo Matching立体匹配算法介绍
  3. 系统架构设计师论文范文-论基于DSSA的软件架构设计与应用
  4. 删除Mac上的UPedit
  5. 在计算机窗口中什么中的文件不能被删除,在Windows操作系统中,“回收站”可以恢复(1)上使用键删除的文件或文件夹。在“我的电脑”窗口中,...
  6. linux屏幕拷贝,使用gnome-screenshot在Linux中截取屏幕截图的综合指南
  7. PHP单页面加密视频教程附源码,thinkphp3.2最新版本项目实战视频教程(含源码)
  8. google play 已停止运行,com.google.process.gapps已停止运行问题的解决办法
  9. 地图着色问题javaScript版-- 《算法分析与设计》课程设计题目
  10. 淘宝直播间互动工具,自动回复助手,匹配关键词回复指定内容