Django框架简介
Django是基于python的重量级的开源框架。拥有高度定制的ORM和大量的API,简单的视图编写,优雅的URL,适合快速开发的模版,以及强大的管理后台。 最新的Django支持ASGI异步编程。www.djangoproject.com/
1,新版本特性
目前已经发展到4.2了,初学的我还在看3.0,不过用来学习够了,(https://blog.csdn.net/weixin_42908597/article/details/130376091?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169772638916800182131419%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169772638916800182131419&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-130376091-null-null.142^v96^pc_search_result_base7&utm_term=Django%E6%96%B0%E7%89%88%E6%9C%AC&spm=1018.2226.3001.4187) 这是一篇关于新版本特征的文章,主要是对于Python版本的更新和数据库支持以及ASGI的一些更新,具体点击上面的链接。
ASGI是异步网关协议接口,是介于网络协议服务和Python应用之间的标准接口,能够处理多种通用的协议类型,
1,Sync-only:只支持同步
2,Sync-native:原生异步,带有异步封装器
3,Async-native:原生异步,带有异步封装器
2,安装Django Web框架
pip install Django
创建项目
1,使用命令行创建项目
就是在你的项目目录下,使用命令行,最好是在虚拟环境下玩项目 使用命令
js
django-admin startproject blog
该目录下会生成一些文件
Django项目中的文件及说明 | |
---|---|
文件 | 说明 |
manage.py | 程序的执行入口 |
blog/init.py | 空文件,告诉Python这是一个Python包 |
blog/asgi | 项目运行在ASGI兼容的Web服务器上 |
settings.py | 总配置文件,配置App,数据库,中间件,模版等 |
urls.py | 路由配置文件,也可以是include其他路径下的urls.py |
wsgi.py | WSGI接口文件,用来处理Web请求 |
运行项目的话在终端等地方使用
python
python manage.py runserver
创建应用
在Django项目中使用应用来完成不同模块的任务。一个项目包含多个应用,一个应用可以在多个项目中来使用。在Django中,一个应用就是一个包,都遵循着相同的约定。 python manage.py startapp article
创建应用 ,这下就有两个应用目录了,
article目录中的文件及说明 | |
---|---|
文件 | 说明 |
init.py | 空文件,告诉Python这是一个Python包 |
migrations | 执行数据库迁移生成的脚本 |
domain.py | 配置Django管理后台的文件 |
apps.py | 单独配置用户添加的每一个app文件 |
models.py | 创建数据库数据模型对象的文件 |
tests.py | 用来编写测试脚本的文件 |
views.py | 用来编写视图控制器的文件 |
创建完应用后,还需要在blog/settings.py中激活应用。 |
ini
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article.apps.ArticleConfig', #这一行是新增的,激活article应用
]
通常情况下,INSTALLED_APPS包括了一下Diango应用
- django.contrib.admin :管理员站点
- django.contrib.auth :认证授权系统
- django.contrib.contenttypes :内容类型系统
- django.contrib.sessions :会话框架
- django.contrib.messages :消息框架
- django.contrib.staticfiles :管理静态文件的框架
数据模型
在用Django编写数据库驱动的Web应用时,第一步就是定义模型(models),也就是数据库结构设计和附加的其他元数据。Django支持ORM(对象关系映射),所以可以使用模型类来操作关系型数据库
1,在应用中添加数据模型
在articles/models.py文件里,创建User模型类和Article模型类
python
from django.db import models # 引入django.db.models模块
class User(models.Model):
"""
User模型类,数据模型应该继承于models.Model或其子类
"""
id = models.IntegerField(primary_key=True) # 主键
username = models.CharField(max_length=30) # 用户名,字符串类型
email = models.CharField(max_length=30) # 邮箱,字符串类型
class Article(models.Model):
"""
Article模型类,数据模型应该继承于models.Model或其子类
"""
id = models.IntegerField(primary_key=True) # 主键
title = models.CharField(max_length=120) # 标题,字符串类型
content = models.TextField() # 内容,文本类型
publish_date = models.DateTimeField() # 出版时间,日期时间类型
user = models.ForeignKey(User, on_delete=models.CASCADE) # 设置外键
docs.djangoproject.com/en/4.2/ref/...这是Django官方最完整的字段类型介绍。有需要可自行查看,
2,执行数据库迁移
创建完数据模型后,接下来就是执行数据库迁移。Django支持多种数据库,SQLite,MYSQL,MariaDB等,需要使用哪一个数据库在blog/settings.py下面设置就ok啦
安装数据库驱动程序后,这里使用的MYSQL,在blog/blog/init.py文件中添加
ini
import pymysql
# 为实现版本兼容,此处设置mysqlclient的版本
pymysql.version_info = (1, 3, 13, "final", 0)
pymysql.install_as_MySQLdb()
python manage.py makemigrations
生成迁移文件 python manage.py migrate
迁移数据库,创建新表 创建好的表名称为"app名称+下划线+模型类名称小写"
迁移可以让开发者在开发过程中持续的改变数据库结构,而不需要重新删除和创建表;专注于数据库平滑升级,不丢失数据。实现数据迁移,改变模型,
- 编辑models.py文件,改变模型
- 运行
python manage.py makemigrations
生成迁移文件 - 运行
python manage.py migrate
实现数据库迁移 数据库迁移被分成生成和应用两个命令,
3,了解Django数据API
进入交互式Python命令行,尝试Django创建的各种API python manage.py shell
在命令行可以使用python命令 例如导入from article.models import User,Article
使用类名.objects.CRUD
增删改查,和之前的Flask一样
管理后台
生成一个后台管理系统 python manage.py createsuperuser
输入管理员账户和密码,密码至少需要8个字符 创建完成后,重新启动服务器,在浏览器访问http://127.0.0.1:8000/admin即可访问项目后台管理页面,管理员页面默认的,可以自定义,后期再说,还没了解到。
路由
URL是Web服务的入口,路由urls是用来处理URL和函数之间关系到额调度器 Django的路由流程如下。 (1)查找全局的urlpatterns变量,即blog/urls.py文件中的urlpatterns变量 (2)按照先后顺序,对URL注意匹配urlpatterns列表中的每一个元素 (3)找到第一个匹配时停止查找,根据匹配结果执行相应的处理函数 (4)找到第一个匹配或者出现异常,Django进行错误处理
Django支持的路由形式
(1)精确字符串形式 (2)路径转换器形式 (3)正则表达式形式
使用include包含路由
分组路由