Django框架学习--4--分布式路由ORM基础
本篇文章要点:
1.如何通过分布式路由方法避免主路由文件的urlpatterns过于臃肿?
2.使用ORM框架代替数据库的操作?
1. Django的分布式路由实现
创建应用
应用在django项目中是一个独立的业务模块,可以包含自己的路由、视图、模版和模型;例如在大型网站中会有音乐、新闻、体育各个频道,这每一个都可以做成一个应用。
基本步骤:
- 创建应用文件夹:python3 manage.py startapp 应用名
- 注册: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:
- 先确认ubuntu是否安装python3-dev和default-libysqlclient-dev
- sudo apt list --installed|grep -E 'libysqlclient-dev|python3-dev'
- 没有时先安装缺少的文件:sudo apt-get install python3-dev default-libmysqlclient-dev
- 然后安装mysqlclient: sudo pip3 install mysqlclient
- 最后检查安装: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同步对模型的更改到数据库模式的方式
- 生成迁移文件 - python3 manage.py makemigrations - 应用下models.py生成一个中间文件保存在migrations文件下
- 执行迁移脚本程序- python3 manage.py migrate-将每个应用下的migraitons目录中的中间文件同步会数据库
注意,在第一次使用数据库迁移时会同步django本身自带的表被同步
在企业大型项目开发时,可能会出现数据库的迁移文件混乱,解决方案如下:
- 删除所有migrations所有的文件但保留__init__.py
- sql>drop database 数据库;
- 常规方式再重新初始化
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基础相关推荐
- Django的学习需要掌握的一些基础和初步搭建自己的框架
一.Django的学习需要掌握的一些基础 第一个需要注意的点:客户端发送过来的数据结构组成: 第二个需要注意的点:动态网页和静态网页 静态网页:用户发送请求,服务端找到对应的静态文件返回给浏览器,静态 ...
- Django框架学习(一)Django框架安装和项目创建详解
Django框架学习(一)Django框架安装和项目创建详解 文章目录 Django框架学习(一)Django框架安装和项目创建详解 一.简介 1.1介绍 1.2 URL 1.3.框架原理 二.安装 ...
- python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...
- Python Web开发——Django框架学习
文章目录 Web开发简介 Web应用技术 Web前端开发 Web后端开发 使用 Django 开发后端服务 项目目标 管理员操作 登录界面 客户管理界面 添加客户界面 药品管理界面 添加药品界面 订单 ...
- django框架学习文档_Python四大主流网络编程框架,你知道么?
高并发处理框架-- Tornado Tornado 是使用 Python 编写的一个强大的可扩展的 Web 服务器.它在处理高网络流量时表现得足够强健,却在创建和编写时有着足够的轻量级,并能够被用在大 ...
- Django框架学习
Django是现在世界上python语言应用最广泛.发展最成熟的web框架.它足够完整 ,不需要依赖其他就可以开发出 非常完整的web应用.Django的主要内容如下: Django综述:了解Djan ...
- Django的多应用分布式路由
应用就是在Django项目中,是一个独立的业务模块,可以包含自己的路由,视图,模板,模型. 创建应用app 创建步骤 用manage.py 中的子命令 startapp 创建应用文件夹 在settin ...
- 简单了解Django应用app及分布式路由
前言 应用在Django的项目中是一个独立的业务模块,可以包含自己的路由,视图,模板,模型. 一 创建应用程序 创建步骤 用manage.py中的子命令startapp创建应用文件夹 在setting ...
- Django值应用和分布式路由
以豆瓣为例,界面上展示了很多栏目,比如电影,音乐等等,每个类型下面有自己的一些内容?我们试想一下,这些内容是否会使用一个views.py处理所有呢?这样版本管理起来太复杂了,此时就有了Django应用 ...
最新文章
- Linux必学的系统管理命令-1
- 笔记:常用SQL语句
- navicat快捷键
- pycharm 快捷键介绍
- nginx html解析插件,nginx配置信息的解析流程
- 素数对(信息学奥赛一本通-T1403)
- 大火C4D元素,电商大促海报背景BANNER素材
- Cannot use a leading .. to exit above the top directory
- 人声歌姬语音合成器+全套拓展 – Yamaha Vocaloid 4.3.0 + ALL Libraries WiN
- 基于libVLC的视频播放器之五:抽帧
- 【图像处理】PS曲线工具matlab实现 交互自定义灰度映射(Gray Level Transformation)附代码链接
- NOJ [F] 懒惰的风纪委Elaine 求一堆数能组成多少个数小于等于n
- 关于uIP移植以及部分特性解析和勘误
- python鼠标点击事件
- 计算机硬件英语词汇,计算机硬件英语词汇
- linux下安装anaconda教程清华源
- 软件推广:快乐想象识字法全集
- 根据域名获取ip地址、端口、服务器类型和标题
- 地产网站建设步骤-企业房地产网站建设策划技巧及方案
- 电脑IPv4和物理地址(MAC)随机变化的解决方式(固定MAC地址)
热门文章
- 泰国80亿互联网记录数据库泄漏,疑遭黑客攻击
- Microsoft MSN Messenger 7.0.0205 Beta Leaked
- 京东物流IPO:商流、物流、资金流,“三流”难归一
- MOS管当开关控制时,一般用PMOS做上管NMOS做下管的原因
- ReadyAPI 教程和示例(一)
- matlab中利用xy求取多项式z,matlab基础练习题
- 因测试和登录软件微信被封,淘客必须注意,微信封号原则是什么?
- DataGrip 连接MySQL 找不到需要的schemas
- 轻松读书——麦肯锡教我的写作武器
- (Animator详解一)mixamo动画导入Unity的一些配置