Python全栈 Web(Django框架、后台管理,ORM关系)

简介: Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发、项目、flask项目、项目实战、django框架、Python项目、Python的Flask框架、Pytho.
F查询和Q查询:
    F()
        在之执行中获取某字段的值
        F("字段名")
        将所有人的年龄加10
        form django.db.models import F
        Author.objects.all().update(age=F("age")+10)

def doF_views(request):
  Author.objects.all().update(age=F('age')+10)
  return redirect('/07-queryall')

    Q()
        在查询条件中可以完成or操作
        Q(条件)|Q(条件)
        查询所有id为1或年龄为48的人的信息
        form django.db.models import Q
        Author.objects.filter(Q(id=1)|Q(age=48))

  authors = Author.objects.filter(Q(age=30|Q(id__gt=20)))

原生的数据库操作方法:
    查询:
        函数:raw(sql)
            Entry.objects.raw(sql)
            返回值:QuerySet
    增删改:
        from django.db import connection
        with connection.cursor() as cursor
            sql = "delete from ..."
            cursor.execute(sql)
            return ""

def raw_views(request):
  sql = "select * from index_author where age>45"
  authors = Author.objects.raw(sql)
  for au in authors:
    print(au.name,au.age,au.email)
  return HttpResponse("Query OK")

使用后台管理 models
    创建后台管理员
      ./manage.py createsuperuser
        username:输入用户名  如果不写默认为系统名称
        email Address:电子邮件
        Password:密码
        Password(agian):重复密码
    基本管理:
        在应用中的admin.py中注册要管理的数据
        1.admin.py
            注册需管理的models类  只有在此注册的models类才允许被管理
        2.注册models
            from .models import *
            admin.site.register(Entry)
    通过models类的内部类 meta 来定义展现形式
        class Author(models.Model):
            ...
            ...
            class Meta:
                db_table
                    指定实体类映射到表的名字
                    (该属性设置完成后会同步到数据库)
                verbose_name
                    定义实体类在admin中现显示的名字(单数)
                verbose_name_plural
                    定义实体类在admin中显示的名字(复数)

#创建 Author 的实体类
#1.name - 姓名(CharField -> varchar)
#2.age - 年龄(IntegerField -> int)
#3.email - 电子邮件(EmailField -> varchar)
class Author(models.Model):
  name = models.CharField(max_length=30,verbose_name='姓名')
  age = models.IntegerField(verbose_name='年龄')
  email = models.EmailField(null=True,verbose_name='邮件')
  #表示用户的激活状态:True,表示已激活,False,表示未激活
  #由于是新增列,所以必须要给默认值或允许为空
  #由于BooleanField默认是不允许为空的,所以此处选择了增加默认值
  isActive = models.BooleanField(default=True,verbose_name='激活用户')
  #增加一个字段,表示用户的头像,可以上传的
  picture = models.ImageField(upload_to="static/upload",null=True,verbose_name='头像')

  # 重写 __str__ ,来定义该对象的字符串表示
  def __str__(self):
    return self.name

  #增加内部类Meta来定义其展现形式
  class Meta:
    #1.修改表名为author
    db_table = 'author'
    #2.指定后台管理时要显示的名字
    verbose_name = '作者'
    verbose_name_plural = verbose_name
    #3.指定排序规则
    ordering = ['-age']
  def __repr__(self):
    return "<Author:%r>" % self.name

    高级管理:
        在admin.py中创建高级管理类并注册
        定义EntryAdmin 类 继承admin.ModelAdmin
        class AuthorAdmin(admin.ModelAdmin):
            pass
        注册高级管理类
        admin.site.register(Entry, EntryAdmin)

        允许在EntryAdmin中增加属性
        list_display
            定义在列表页上显示的字段们
            取值:
                由属性名组成的元组或列表
        list_display_links
            定义在列表页也能链接到详情页的字段们
            取值:
                同上
                这里的取值必须要出现在list_display中
        list_editable
            定义在列表页中允许被修改的字段们
            取值:
                同上
                必须出现在list_display中 但是不能出现在list_display_links中
        search_fields
            添加允许搜索的字段们
            取值 同上
        list_filter
            列表页的右测增加过滤器  实现快速筛选
        date_hierarchy
            列表页的顶部增加时间选择器
            DateField 或 DateTimeField的列名
        fields
            在详情页中  指定显示那些字段 并按照什么样式的顺序显示
            取值:
                由属性名组成的列表或元组
        fieldsets
            在详情页面中 对字段们进行分组显示的
            fieldsets 与 fields不能共存
            取值:
                fieldsets = [
                    # 分组1
                    ("分组名称", {
                        "fields":("属性1", "属性2")
                        "classes": ("collapse")
                    }),
                    # 分组2
                    (),

                ]

from django.contrib import admin
from .models import *

#声明高级管理类
class AuthorAdmin(admin.ModelAdmin):
  #指定在列表页中显示的字段们
  list_display = ('name','age','email')
  #指定能够连接到详情页的字段们
  list_display_links = ('name','email')
  #指定在列表页中就允许被修改的字段们
  list_editable = ('age',)
  #指定条件的搜索字段们
  search_fields = ('name','email')
  #指定右侧过滤器
  list_filter=('name',)
  #指定显示的字段以及显示的顺序
  # fields = ('name','isActive','email')
  #指定显示的字段分组
  fieldsets = (
    #分组1
    ('基本信息',{
      'fields':('name','email'),
    }),
    #分组2
    ('可选信息',{
      'fields':('age','isActive','picture'),
      'classes':('collapse',),
    })
  )


class BookAdmin(admin.ModelAdmin):
  #指定时间选择器
  date_hierarchy = "publicate_date"


class PublisherAdmin(admin.ModelAdmin):
  list_display = ('name','address','city','website')
  list_editable = ('address','city')
  list_filter = ('address','city')
  search_fields = ('name','website')
  fieldsets = (
    ('基本选项',{
      'fields':('name','address','city'),
    }),
    (
      '高级选项',{
        'fields':('country','website'),
        'classes':('collapse',)
      }
    )
  )


# Register your models here.
# 注册高级管理类
admin.site.register(Author,AuthorAdmin)
admin.site.register(Publisher,PublisherAdmin)
admin.site.register(Book,BookAdmin)
# 注册普通管理类
admin.site.register(Wife)


关系映射:
    一对一的关系映射
        语法:
            在关联的连个类的任何一个中增加
            属性 = models.OneToOneField(Entry)

            class Author(models.Model):
                ....

            class Wife(models.Model);
                ....
                # 增加对Author的一对一引用
                author = models.OneToOneField(Author)
                # 在数据库中生成一个外键列在wife表中  要引用自author 表中的主键
                # 在Author模型中也会增加一个隐式属性叫wife

  #引用Author,实现一对一映射
  author = models.OneToOneField(Author,verbose_name='相公')

        查询:
            正向查询:
                直接通过关联属性就能获取到关联数据
                通过wife找author
                wife = Wife.objects.get(id=1)
                author = wife.author
            反向查询:
                通过反向引用属性查询
                通过author找wife
                author = Author.objects.get(id=1)
                # 反向引用的属性就是模型类的全小写
                wife = author.wife

  #正向查询
  wife = Wife.objects.get(id=1)
  wife_author = wife.author
  #反向查询
  author = Author.objects.get(id=1)
  author_wife = author.wife
  return render(request,'14-oto.html',locals())

    一对多关系映射:
        语法:
            在"多"的模型中对"一"的模型引用
            属性 = models.ForeignKey(Entry)
            class Publisher(models.Model):
                ....

            class Book(models.Model):
                ....

                publisher = modelsForeignKey(Publisher)

  #增加对Publisher的引用(1:M)
  publisher = models.ForeignKey(Publisher,null=True)

        查询:
            正向查询:
                book = Book.objects.get(id=1)
                publisher = book.publisher
            反向查询:
                django 会默认在publisher中增加book_set属性  来表示对应的所有书籍的查询对象
                publisher = Publisher.objects.get(id=1)
                publisher = publisher.book_set.all()


def otm_views(request):
  # 正向查询:通过Book查询Publisher,在15-otm.html中显示每个book对应的publisher
  books = Book.objects.all()
  # 反向查询
  pub = Publisher.objects.get(id=1)
  pub_books = pub.book_set.all()
  return render(request,'15-otm.html',locals())

    多对多关系映射:
        语法:
            在关联地 任意一个类中都可以增加
            属性 = models.ManyToManyField(Entry)
            class Author(models.Model):
                ....

            class Book(models.Model):
                ....

                authors = models.ManyToManyField(Author)

  #增加对Author的引用(M:N)
  authors = models.ManyToManyField(Author)

        查询:
            正向查询;
                通过Book查询Author
                authors 属性只是提供了关联表的查询引用 还需要使用all() values()等方法来获取真实的数据


def mtm_views(request):
  #正向查询:通过 book 查询 authors
  book = Book.objects.get(id=1)
  authors = book.authors.all()
  #反向查询:通过 author 查询 book
  author = Author.objects.get(id=2)
  books = author.book_set.all()
  return render(request,'16-mtm.html',locals())


相关文章
|
4月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
388 0
|
4月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
459 1
|
4月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
583 0
|
4月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
283 0
|
5月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
158 1
|
5月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
251 0
|
6月前
|
API 数据安全/隐私保护 Python
拼多多批量上架软件, 电商一键上货发布工具,python电商框架分享
多线程批量上传架构,支持并发处理商品数据 完整的拼多多API签名和token管理机制
|
7月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
7月前
|
消息中间件 存储 API
抖音私信协议软件,抖音群发私信的工具,抖音自动私信插件【python框架】
这个框架包含配置管理、消息队列、API客户端和主程序四个主要模块。配置管理负责存储账号信息和设置
|
7月前
|
数据采集 API 调度
Python爬虫框架对比:Scrapy vs Requests在API调用中的应用
本文对比了 Python 中 Scrapy 与 Requests 两大爬虫框架在 API 调用中的差异,涵盖架构设计、调用模式、性能优化及适用场景,并提供实战建议,助力开发者根据项目需求选择合适工具。

推荐镜像

更多