本篇文章要点:

1.如何通过分布式路由方法避免主路由文件的urlpatterns过于臃肿?

2.使用ORM框架代替数据库的操作?

1. Django的分布式路由实现

创建应用

应用在django项目中是一个独立的业务模块,可以包含自己的路由、视图、模版和模型;例如在大型网站中会有音乐、新闻、体育各个频道,这每一个都可以做成一个应用。

基本步骤:

  1. 创建应用文件夹:python3 manage.py startapp 应用名
  2. 注册:settings.py中INSTALLED_APPS配置项添加应用名

在创建的应用文件夹下可以看到以下内容:

  • migrations 同步迁移文件
  • __init__.py 初始化文件
  • admin 管理后台,models 模型层入口
  • tests 测试模块
  • views 视图模块

配置分布路由

什么是分布式路由?

  • 主路由配置文件可以不处理用户具体路由,只做请求的分发(分布式请求处理),具体的请求可以由各自的应用进行处理。

配置方法:主路由中调用include函数

include()函数
语法:include(‘app名称.url模块名‘)
作用:用于当前路由转到各个应用的配置文件的urlpatterns进行分布式处理
引用:from django.urls import include

如图:

urlpatterns = [path('admin/', admin.site.urls),# http://127.0.0.1:8000/news/indexpath('news/', include('news.urls')),
]

然后在应用文件下views.py文件,写入如下内容:

from django.http import HttpResponse
# Create your views here.def index_view(request):return HttpResponse('这里是新闻频道···')

最后做好应用文件下的urls.py路径映射:

from django.urls import path
from . import viewsurlpatterns = [path('index', views.index_view),
]

就可以看到如下结果:

配置应用下模版层templates

根据分布式路由的想法,django也提供了在不同应用下创建templates模版文件夹,来实现不同应用加载不同模版。

  • 在应用下创建templates文件夹
  • settings.py中templates配置项可以看到 'APP_DIRS': True(允许使用应用下模版)

但需要注意内外模版重名的问题,有如下规则:

  • 当内外层模版层中有同名的模版时会优先使用外层的
  • 当应用之间出现同名时,会按照install_apps配置下的应用顺序逐层查找。

当您想让多个应用下模版重名时,可以在(应用名/tamplates)文件夹下再创建一个文件夹,把同名模版文件放入其中。


2. 模型层及ORM介绍

模型层就是django中负责与数据库进行通信,在了解ORM框架之前,先对django配置mysql

django配置mysql:

  1. 先确认ubuntu是否安装python3-dev和default-libysqlclient-dev
  2. sudo apt list --installed|grep -E 'libysqlclient-dev|python3-dev'
  3. 没有时先安装缺少的文件:sudo apt-get install python3-dev default-libmysqlclient-dev
  4. 然后安装mysqlclient: sudo pip3 install mysqlclient
  5. 最后检查安装:sudo pip3 freeze|grep -i 'mysql'下必须有mysqlclient

数据库的配置:

1.settings.py 中配置项DATABASES


DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 指定数据库存储引擎'NAME': 'mysite1','USER':'root','PASSWORD':'123456','HOST':'127.0.0.1','PORT':'3306',}
}

2. terminal中登录mysql

mysql -uroot -psql>create database mysite1 default charset utf8;

ORM框架基础

什么是模型?

一个python类,他是由django.db.models.Model派生出的子类

  • 一个模型类代表数据库中的一张数据表
  • 模型类中的每一个类属性都代表数据库中的一个字段
  • 模型是数据交互的接口,是表示和操作数据库的方法和方式。

ORM框架简介:

ORM框架叫做对象关系映射

  • 作用:避免通过SQL语句操作数据库
  • 映射关系:类-数据表,对象-数据行,属性-字段。

实现应用下数据库

1.创建应用bookstore,注册应用,在应用中的models.py文件下写入Book类:

#models.py/bookstore
from django.db import models
class Book(models.Model):title = models.CharField('书名', max_length=50, default='')price = models.DecimalField('价格', max_digits=7, decimal_places=2)

2.数据库迁移:

迁移:django同步对模型的更改到数据库模式的方式

  1. 生成迁移文件 - python3 manage.py makemigrations - 应用下models.py生成一个中间文件保存在migrations文件下
  2. 执行迁移脚本程序- python3 manage.py migrate-将每个应用下的migraitons目录中的中间文件同步会数据库

注意,在第一次使用数据库迁移时会同步django本身自带的表被同步

在企业大型项目开发时,可能会出现数据库的迁移文件混乱,解决方案如下:

  1. 删除所有migrations所有的文件但保留__init__.py
  2. sql>drop database 数据库;
  3. 常规方式再重新初始化

3.查看表:

use mysite1;
show tables;
desc bookstore_book;(会看到django自动生成一个主键)

创建成功:


3.ORM-基础字段

常用的字段类型

字段类型 对应mysql中的类型 解释
BooleanField() tinyint(1) 数据库中1,0表示
CharField() varchar() 必须指定max_length参数值
DateField() date 表示日期 参数auto_now()=True当前时间,auto_now_add第一次会设置-default=‘2022-1-18’
DateTimeField() datetime(6) 参数同上
FloatField double
DecimalField() decimal(x,y)使用小数 参数max_digits的位数>=decimal_places(小数点后的数字数量 ), 必须给定以上参数
EmailField() varchar() 更新值时,会有正则的检查
InterField() int 
ImageField() varchar(100) 在数据库中为了保存图片的存储路径
TextField() longtext 表示不定长的字符数据

更改bookstore模式

需求:为bookstore表 添加一个名为info的字段 varchar(100)

  • info = models.CharField('描述', max_length=100,default='')
  • 再migrations和migrate一下

4.ORM-选项&Meta类

基本字段选项

字段选项:指定创建列的额外信息

primary_key =True设为主键,没有该字段时django自动创建一个id主键,=False时就不会指定
blank =True时字段可以为空,控制后台的
null =True ,默认为False
default 设置所在列的默认值,当null=False时建议添加(新增字段时必须给)
db_index =True ,该列创建索引
unique =True,值唯一
db_column 指定列的字段名,不指定会采用属性名为列名
verbose_name 设置此字段在admin界面上的显示名称

模型类-Meta类

基本格式:

from django.db import models
class 模型类名(models.Model):字段名 = models.字段类型(字段选项)class Meta:db_table = '重命名' # 修改当前模型类对应的表名

使用内部Meta类给模型赋予属性:


from django.db import modelsclass Book(models.Model):title = models.CharField('书名', max_length=50, default='', unique=True)pub = models.CharField('出版社', max_length=100, default='') #默认null=Falseprice = models.DecimalField('价格', max_digits=7, decimal_places=2)info = models.CharField('描述', max_length=100,default='')market_price = models.DecimalField('零售价',max_digits=7, decimal_places=2,default=0.0)class Meta:db_table = 'book'class Author(models.Model):name = models.CharField('姓名',max_length=11)age = models.InterField('年龄', default=True)email = models.EmailField('邮箱', null=True)class Meta:db_table = 'author'

除了修改数据表名称之外,在后续的admin管理后台中可以对站点管理中自定义模型类名称的单复数进行修改:

verbose_name = '单数名'verbose_name_plural = '复数名'

5.ORM-创建数据

ORM框架可以使用其提供的方式实现数据库的增删改查功能。

什么是管理器对象?

每个继承models.Model的模型类,都会有一个objects对象被同样继承下来,这个对象就是管理器对象。

如何在已有的数据库模式上提交数据?

使用django shell,它能够在交互模式用项目工程的代码执行相应的操作,每次启动时(Python3 manage.py shell)都会把项目当前环境模拟一次,所以项目代码发生改变时,需要重新进入。

django shell 下提交数据的两种方式:

b1 = Book.objects.create(title='Python',pub='xx出版社',price=20,marke_price=25)b2 = Book(title='Django',pub='xx出版社',price=70,market_price=100)
b2.save()     

数据创建结果如下:

Django框架学习--4--分布式路由ORM基础相关推荐

  1. Django的学习需要掌握的一些基础和初步搭建自己的框架

    一.Django的学习需要掌握的一些基础 第一个需要注意的点:客户端发送过来的数据结构组成: 第二个需要注意的点:动态网页和静态网页 静态网页:用户发送请求,服务端找到对应的静态文件返回给浏览器,静态 ...

  2. Django框架学习(一)Django框架安装和项目创建详解

    Django框架学习(一)Django框架安装和项目创建详解 文章目录 Django框架学习(一)Django框架安装和项目创建详解 一.简介 1.1介绍 1.2 URL 1.3.框架原理 二.安装 ...

  3. python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式

    本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...

  4. Python Web开发——Django框架学习

    文章目录 Web开发简介 Web应用技术 Web前端开发 Web后端开发 使用 Django 开发后端服务 项目目标 管理员操作 登录界面 客户管理界面 添加客户界面 药品管理界面 添加药品界面 订单 ...

  5. django框架学习文档_Python四大主流网络编程框架,你知道么?

    高并发处理框架-- Tornado Tornado 是使用 Python 编写的一个强大的可扩展的 Web 服务器.它在处理高网络流量时表现得足够强健,却在创建和编写时有着足够的轻量级,并能够被用在大 ...

  6. Django框架学习

    Django是现在世界上python语言应用最广泛.发展最成熟的web框架.它足够完整 ,不需要依赖其他就可以开发出 非常完整的web应用.Django的主要内容如下: Django综述:了解Djan ...

  7. Django的多应用分布式路由

    应用就是在Django项目中,是一个独立的业务模块,可以包含自己的路由,视图,模板,模型. 创建应用app 创建步骤 用manage.py 中的子命令 startapp 创建应用文件夹 在settin ...

  8. 简单了解Django应用app及分布式路由

    前言 应用在Django的项目中是一个独立的业务模块,可以包含自己的路由,视图,模板,模型. 一 创建应用程序 创建步骤 用manage.py中的子命令startapp创建应用文件夹 在setting ...

  9. Django值应用和分布式路由

    以豆瓣为例,界面上展示了很多栏目,比如电影,音乐等等,每个类型下面有自己的一些内容?我们试想一下,这些内容是否会使用一个views.py处理所有呢?这样版本管理起来太复杂了,此时就有了Django应用 ...

最新文章

  1. Linux必学的系统管理命令-1
  2. 笔记:常用SQL语句
  3. navicat快捷键
  4. pycharm 快捷键介绍
  5. nginx html解析插件,nginx配置信息的解析流程
  6. 素数对(信息学奥赛一本通-T1403)
  7. 大火C4D元素,电商大促海报背景BANNER素材
  8. Cannot use a leading .. to exit above the top directory
  9. 人声歌姬语音合成器+全套拓展 – Yamaha Vocaloid 4.3.0 + ALL Libraries WiN
  10. 基于libVLC的视频播放器之五:抽帧
  11. 【图像处理】PS曲线工具matlab实现 交互自定义灰度映射(Gray Level Transformation)附代码链接
  12. NOJ [F] 懒惰的风纪委Elaine 求一堆数能组成多少个数小于等于n
  13. 关于uIP移植以及部分特性解析和勘误
  14. python鼠标点击事件
  15. 计算机硬件英语词汇,计算机硬件英语词汇
  16. linux下安装anaconda教程清华源
  17. 软件推广:快乐想象识字法全集
  18. 根据域名获取ip地址、端口、服务器类型和标题
  19. 地产网站建设步骤-企业房地产网站建设策划技巧及方案
  20. 电脑IPv4和物理地址(MAC)随机变化的解决方式(固定MAC地址)

热门文章

  1. 泰国80亿互联网记录数据库泄漏,疑遭黑客攻击
  2. Microsoft MSN Messenger 7.0.0205 Beta Leaked
  3. 京东物流IPO:商流、物流、资金流,“三流”难归一
  4. MOS管当开关控制时,一般用PMOS做上管NMOS做下管的原因
  5. ReadyAPI 教程和示例(一)
  6. matlab中利用xy求取多项式z,matlab基础练习题
  7. 因测试和登录软件微信被封,淘客必须注意,微信封号原则是什么?
  8. DataGrip 连接MySQL 找不到需要的schemas
  9. 轻松读书——麦肯锡教我的写作武器
  10. (Animator详解一)mixamo动画导入Unity的一些配置