目录
一:Django框架是什么?
首先Django 是一个用 Python 编写的高级 Web 框架,它鼓励快速开发和干净、实用的设计。Django 遵循模型-视图-模板(MVT)架构模式,这是模型-视图-控制器(MVC)模式的一种变体,用于将应用程序的不同部分(数据访问逻辑、业务逻辑和表现层)分离。Django 的目标是让开发者能够用尽可能少的代码完成开发任务,同时保持代码的可维护性和可扩展性。
废话不多说,不太懂的可以参考一下别人的介绍,我这里直接开始怎么快速搭建一个框架,并前后端可以互通
二:Django框架搭建与创建项目命令(图文)
1.1:安装Django
输入命令:pip install django
备注:这里如果网速比较慢,想快速下载的可以使用镜像,以下是我提供的清华镜像(来源于网络):
-i https://pypi.tuna.tsinghua.edu.cn/simple
使用方法:pip install [包名] -i [pip源URL]
1.2:Django创建项目
按住键盘Shift键 找到Powershell 并打开
输入创建项目命令:
注意创建的目录位置
django-admin startproject 项目名
1.3:模块介绍
打开项目,结构如下:
1.4:创建app模块
为什么要创建app模块,因为在项目开发中,我们有不同的板块,比如订单板块、用户板块我们都可以单独创建一个独立的app模块,这里的app模块类似于JAVA的微服务
第一种方法:cmd cd到项目文件地点
第二种方法:手动打开项目文件夹 按shift键 打开Powershell
python manage.py startapp 模块名
这时候我们的项目结构是这样的:
模块介绍:
模型(Models):定义你的数据结构,即数据库中的表。Django的ORM(对象关系映射)允许你以Python类的方式定义模型,Django会自动为你创建数据库表。
视图(Views):处理业务逻辑和返回响应给客户端。视图函数接收HTTP请求,执行相应的逻辑(如查询数据库、处理表单数据等),然后返回一个HTTP响应。
模板(Templates):Django使用模板系统来生成发送给客户端的HTML。模板文件通常包含静态部分和动态部分(如从数据库查询的数据)。
表单(Forms):用于处理用户输入。Django的表单系统允许你定义表单字段,验证用户输入,并渲染表单到HTML。
迁移(Migrations):当你修改模型时,Django可以自动创建迁移文件来记录这些更改。你可以使用迁移文件来更新数据库结构,以保持数据库与模型同步。
URL配置(URLs):Django使用URLconf(URL配置)来将URL映射到视图。你需要在应用的
urls.py
文件中定义这些映射,并在项目的根urls.py
文件中包含应用的URLconf。
1.5:注册应用
创建应用后,你需要在项目的settings.py
文件中的INSTALLED_APPS
列表中添加应用的名称(不包括.py
扩展名)。这告诉Django你的应用是项目的一部分,并且应该被包含在项目的URL配置、模板搜索路径等中
找到settings.py
文件中的INSTALLED_APPS
列表,并添加你的应用名称,如下所示
现在你的应用已经创建并注册到Django项目中,你可以开始添加模型、视图、模板等,以开发你的应用功能了。
三:配置数据库
1.1:数据库配置
安装mysql的数据库驱动mysqlclient
两种方法 同上(创建app模块)
pip install mysqlclient
找到项⽬的 settings.py ⽂件中找到DATABASES 配置项
默认:
这段代码是Django框架中用于配置数据库连接的一个示例。Django是一个用Python编写的高级Web框架,它鼓励快速开发和干净、实用的设计。在Django项目中,数据库配置是项目设置的一部分,它告诉Django如何连接到你的数据库。这段代码具体配置了Django项目的默认数据库连接
将其修改为:数据库(名称)(用户名)(密码)(主机地址)仅供参考
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myapp', # 数据库名称 'USER': 'root', # 数据库用户名 'PASSWORD': '123456', # 数据库密码 'HOST': 'localhost', # 数据库主机地址 'PORT': '3306', # 数据库端口号 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, } }
'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", },
解释:在Django的数据库配置中,OPTIONS
字典允许你为数据库连接指定额外的选项或参数。OPTIONS
字典被用来设置MySQL数据库的sql_mode,
这里的 init_command
选项用于在数据库连接建立后立即执行一条SQL命令。在这个例子中,执行的命令是 SET sql_mode='STRICT_TRANS_TABLES'
1.2:字段类型
models.CharField
- MySQL 字段类型:
VARCHAR
或CHAR
(取决于Django字段的max_length
和数据库配置) - 用途:用于存储短字符串,如姓名、电子邮件地址等。
- MySQL 字段类型:
models.TextField
- MySQL 字段类型:
TEXT
或LONGTEXT
(取决于需要存储的文本量) - 用途:用于存储大量文本,如文章、评论等。
- MySQL 字段类型:
models.IntegerField
- MySQL 字段类型:
INT
- 用途:用于存储整数值,如年龄、数量等。
- MySQL 字段类型:
models.DateTimeField
- MySQL 字段类型:
DATETIME
- 用途:用于存储日期和时间,包括时区信息(如果启用了Django的时区支持)。
- MySQL 字段类型:
models.EmailField
- MySQL 字段类型:
VARCHAR
(因为Django没有专门的Email类型,所以它会使用CharField
,并附加一个Email验证器) - 用途:用于存储电子邮件地址,并在模型验证时检查格式是否正确。
- MySQL 字段类型:
需要注意的是,虽然Django字段类型在内部会映射到MySQL的相应字段类型,但Django也提供了一些机制来覆盖这些默认映射,比如通过自定义字段或使用数据库迁移时的特定选项。此外,Django还提供了许多其他字段类型,如models.BooleanField
(映射到MySQL的TINYINT
)、models.FloatField
(映射到MySQL的FLOAT
或DOUBLE
)等,以满足不同的数据存储需求
四:后端代码的编写
这里前端代码小镇这里就不提供了,有兴趣的小伙伴可以去vue官网学习一下,小镇后期可能会出一期关于前端vue框架的相关知识,可以完整看到前后端联调
小镇这里采用了django框架中的基类APIView
和HttpResponse
1.1:APIView的介绍
APIView
的作用
APIView
是DRF的核心之一,它为构建RESTful Web服务提供了基础。通过继承APIView
,你的视图类可以获得以下功能:
-
请求解析:
APIView
能够自动解析HTTP请求中的数据,包括JSON和表单数据,并将它们转换为Python对象,这样你就可以在视图的方法中直接使用这些数据了。 -
响应渲染:与请求解析相对应,
APIView
也能够根据客户端的请求头(如Accept
头)自动选择合适的响应格式(如JSON、XML等),并将Python对象渲染成相应的响应体。 -
内容协商:
APIView
支持内容协商,即根据客户端的请求自动确定最适合的响应格式。 -
认证:DRF提供了多种认证机制,如Token认证、Session认证等。通过
APIView
,你可以轻松地为你的API视图添加认证功能。 -
权限:与认证类似,DRF也提供了权限控制功能。通过
APIView
,你可以控制哪些用户或用户组可以访问特定的API视图。 -
限流:为了防止API被过度使用,
APIView
支持限流功能,可以限制特定时间内某个客户端可以发起的请求数。 -
请求/响应生命周期:
APIView
定义了一个请求/响应的生命周期,包括请求的接收、处理、响应的生成和发送等阶段。通过重写APIView
中的方法(如dispatch
、get
、post
等),你可以自定义这些阶段的行为。
1.2:
HttpResponse的介绍
HttpResponse 的作用
-
生成响应:
HttpResponse
类用于生成 HTTP 响应,并将其发送给客户端(如浏览器)。你可以设置响应的状态码、内容类型(MIME 类型)以及响应体(即发送给客户端的内容)。 -
设置状态码:HTTP 响应通常包含一个状态码,用于指示请求是否成功、失败或需要重定向等。
HttpResponse
允许你通过其构造函数或status_code
属性来设置响应的状态码。 -
设置内容类型:内容类型(也称为 MIME 类型)告诉客户端响应体的内容是什么类型的。例如,
text/html
表示 HTML 文档,application/json
表示 JSON 数据。你可以通过content_type
属性来设置响应的内容类型。 -
设置响应体:响应体是实际发送给客户端的数据。你可以通过传递一个字符串(或其他可迭代的字节序列)给
HttpResponse
的构造函数来设置响应体,或者使用write()
方法或content
属性来修改它。
1.3:安装APIView
HttpResponse已经提供了不需要安装
两种方法 同上(创建app模块)
pip install djangorestframework #这里我使用一下的镜像,上方有提供
1.4:编写代码(简单)
导入并继承APIView
配置相关路径:
在Django中,as_view()
方法是一个非常重要的方法,它通常与基于类的视图(Class-Based Views, CBVs)一起使用。当你看到类似 path('login/', login.as_view()),
的代码时,这里的 login
很可能是指向了一个基于类的视图(Class-Based View)的实例或者引用。as_view()
方法的作用是将这个类(login
)转换为一个可调用的视图函数,这个视图函数可以被Django的URL解析器(URL resolver)调用,以响应HTTP请求
as_view() 方法:
当你定义一个基于类的视图后,你需要通过URL配置来指定当某个URL被请求时应该调用哪个视图。由于URL配置期望的是一个函数(或可调用对象),而不是类,因此你需要使用 as_view() 方法来将你的类转换为一个视图函数。
当你调用 login.as_view() 时,Django会执行以下操作:
首先,检查这个类(login)是否是一个有效的基于类的视图。
然后,它准备一些必要的上下文和配置(如请求方法、URL参数等),并创建一个该类的实例。
最后,它返回一个可调用的视图函数,这个函数封装了类的 dispatch() 方法(或者类中定义的其他特定HTTP方法处理函数,如 get()、post() 等),以便在接收到请求时调用。
1.5:启动后端
前端发送请求后出现一个CORS跨域问题,解决方法如下
五:解决前端发送请求跨域问题
这里小镇是通过通过 django-cors-headers 库来实现的,使用其他方法可以网上寻求一下
1.1:安装cors
两种方法 同上(创建app模块)
pip install django-cors-headers #这里我使用一下的镜像,上方有提供
1.2:修改settings中的配置文件
找到INSTALLED_APPS 那一项加入:
corsheaders
1.3:添加中间件列表
找到MIDDLEWARE
corsheaders.middleware.CorsMiddleware
然后,添加下面配置 允许所有 domain 访问
CORS_ORIGIN_ALLOW_ALL = True
这样跨域的问题就解决了