这里是总结 Django 框架的使用经验帖子,下面只是对开发 Django 项目的一个基础知识总结,尚未开始实际的项目设计。
大学毕设总结 1
- 1. Django 框架简介
- 2. 基础实操开发步骤演示
- 2.1 开发工具准备阶段
- 2.2 创建运行 Django 框架的虚拟环境
- 2.3 创建 Django 项目
- 2.3.1 Windows 命令行非虚拟环境下创建 Django 项目
- 2.3.2 虚拟环境下创建 Django 项目
- 2.3.3 测试下虚拟环境导出依赖包
- 2.3.4 补充说明:推荐使用命令行创建Django项目
- 2.4 运行Django Web 服务
- 2.5 理解 Django 项目的app 和 url 路由
- 2.5.1 理解、删除、创建 Django 项目的 app
- 2.5.2 理解 Django 的 url 路由
- 2.6 Django 的配置文件 setting.py
- 2.7 Django 框架重要命令 makemigrations、migrate、createsuperuser
1. Django 框架简介
1.1 Django 框架的承受能力
2. 基础实操开发步骤演示
2.1 开发工具准备阶段
Pycharm Professional (专业版) 最新版本的都可以——破解的话,其实不用,网上存在一些好心人,有激活码免费提供,如果激活码不行的话,可能被人注册太多次了,失效了,就需要你花点时间去弄破解,当然听说破解版问题挺多的,就看你愿不愿意氪金了,专业版才自带有Django框架。
2.2 创建运行 Django 框架的虚拟环境
Python 的虚拟环境有三个方案选择
- virtualenv
- conda
- Pipenv 不要用 Pipenv - 知乎劝退链接
conda 和 virtualenv 差不多,但我个人觉得比较好用的是 virtualenv ,这是一个虚拟环境文件夹,可以直接用来打包之类的,转移项目也方便很多。
Windows 命令行创建 Python 虚拟环境 virtualenv 的指令:
python -m venv 你的项目简称名
这样就可以等下在虚拟环境内创建 Django 项目,注意这里的 hmsys 代指—— house management system
还不懂的看这链接:
Django搭建 virtualenv 虚拟环境(超详细完整步骤)
2.3 创建 Django 项目
Django 项目可以不创建虚拟环境,不在虚拟环境内创建 Django 项目,但是后期有点麻烦,所以这里演示一番怎么创建的,但是还是比较建议创建虚拟环境后,在虚拟环境内创建 Django 项目。
2.3.1 Windows 命令行非虚拟环境下创建 Django 项目
2.3.2 虚拟环境下创建 Django 项目
Pycharm profeesional 内可以直接创建,具体如下
结果如下所示,在虚拟环境下的 Script 目录下创建一个名为 Hmsys 的 Django 项目:
2.3.3 测试下虚拟环境导出依赖包
cd 到虚拟环境的 Script 目录下 activate 进入虚拟环境 hmsys
导出所需的依赖包(第三方模块)
pip list > D:\PythonProject\hmsys\test.txt
pip freeze > D:\PythonProject\hmsys\requirements.txt
我觉得 pip list 比较好看点,推荐使用 pip list >
退出虚拟环境 hmsys
deactivate
虚拟环境 virtualenv 的创建、删除、退出、快速搭建开发环境链接
2.3.4 补充说明:推荐使用命令行创建Django项目
关于在虚拟环境 virtualenv 内创建 Django 项目——可以不按照我的思路走,比如说在 虚拟环境下 hmsys内的 Script 目录下创建Django 项目,但其实还有另外的方法也就是
django-admin startproject 项目名称
例如
D:\>cd D:\PythonProject\hmsys
D:\PythonProject\hmsys>django-admin startproject config
D:\PythonProject\hmsys>
这样给人的感觉很不错,项目名也没那么容易重复了,virtualenv 虚拟环境名就是项目名,config 配置文件,对项目进行配置,当然这里我只是对于我个人而言感觉较好的,做个笔记,可以自行选择,不必跟风。
不经意间注意到这 Windows 命令行创建的好处,那就是每次我使用 Pycharm 创建 Django 项目后,想要删除 Django 项目,然后指定创建好的 virtualenv 虚拟环境的 Python 解释器,都会给我自行创建一个(1)(2)(3)…(n),所以这就很烦了,动用 Windows 命令行 创建就不会再出现这种糟糕情况,强迫症福音。
在设置里面点击 Python 解释器,选择虚拟环境下的解释器,点击 Apply 或 OK
2.4 运行Django Web 服务
2.4.1 Windows 命令行运行
命令行先进入虚拟环境下,激活虚拟环境后再 cd 到 Django 项目下,运行此 Django Web 服务命令
如:
# 进入 hmsys 虚拟环境文件夹内的 Script 文件内,
# 里面存在一个 activate 运行文件
D:\>cd D:\PythonProject\hmsys\Scripts
# 激活虚拟环境 hmsys
activate
# config 是我的 Django 项目名
cd D:\PythonProject\hmsys\config
python manage.py runserver 0.0.0.0:80
启动 Web 服务命令后,在随意哪种浏览器的URL栏里输入 127.0.0.1
正常显示结果如下所示:
错误显示结果如下:
需要加端口
2.4.2 Pycharm 运行 Django 项目
打开config项目,点击 开始运行 (绿色按钮)
运行后结果:点击蓝色的 127.0.0.1:8000,便会自动弹出浏览器,默认 Microsoft Edge 浏览器
注意:如果想要用本机的 IP 地址(eg:192.168.1.1)访问 Django,而不是 127.0.0.1 这样的,那么就需要在 setting.py 文件内找到 ALLOWED_HOSTS = [] 在方框内添加自己本机的 IP 地址,同理想要用 localhost 访问,也是一样,直接添加就可以了,端口不需要,默认自动加。
补充说明:后面测试下,发现虽然一开始 Pycharm 是用 127.0.0.1:8000 ,默认配置启动 Web 服务,但是后面一旦改了ALLOWED_HOSTS = [] 的配置,就会完全按照这个配置来运行,所以需要加上一个 ‘127.0.0.1’ 否则报错
2.5 理解 Django 项目的app 和 url 路由
2.5.1 理解、删除、创建 Django 项目的 app
2.5.1.1 理解 Django app、删除 app 等于删除文件夹
2.5.1.2 创建 Django 项目的app
2.5.1.2.1 Windows 命令行创建 app
进入项目根目录,执行下面的命令
python manage.py startapp 要创建的app名字
例如创建一个名为 sales 的 app
(hmsys) D:\PythonProject\hmsys\config>python manage.py startapp sales
2.5.1.2.2 Pycharm 工具创建 app
点击 Pycharm 的 Tools ,选择 Run manager.py Task… 会弹出一个命令终端出来,在里面输入
startapp 要创建的 app 名字
例如:
startapp sales
这样就会创建一个目录名为 sales, 对应 一个名为 sales 的app,里面包含了如下自动生成的文件。
sales/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
这个目录其实就是一个python package
里面有很多文件,后面会分别讲到它们的作用。
特别注意:无论是命令行 或 Pycharm 创建 app 时,在 setting.py 文件这里,都不会自动注册刚创建的 app,需要自己手动添加
如:
2.5.2 理解 Django 的 url 路由
2.5.2.1 返回 页面内容 给浏览器
在这个文件内需要用到的 Django 的 http 模块
注意参数: request
如下例子所示:在 app 的 view.py 文件内创建 listorders() 函数
from django.http import HttpResponse
def listorders(request):
return HttpResponse("下面是系统中所有的订单信息。。。")
注意
这里面最终的返回结果是 HttpResponse 对象的参数字符串 ,也就是这句话
"下面是系统中所有的订单信息。。。"
listorders的参数 request 是 Django 中的 HttpRequest 对象,包含了HTTP请求中的信息。
后端程序处理请求,常常要根据请求中的数据进行相应的处理:
我们写后端的代码,这些信息就在 HttpRequest对象中获取。
所以这个参数非常重要。
HttpRequest 对象的属性和用法,具体可以参考官方文档这里
光是定义了这样一个函数不行的,我们需要 告诉 Django :
当前端发送过来的HTTP请求 url地址 是 /sales/orders/ , 就由 views.py 里面的函数 listorders
来处理怎么告诉Django呢?
这就是 Django中的 url路由设置。
2.5.2.2 url 路由 和 appname.view.py 的不解之缘
2.5.2.2.1 添加路由记录
前面在创建项目目录的时候,在项目的设置目录下,有如下的一个urls.py 文件
这个文件是 url路由设置的入口文件
默认的 url 文件内容如下所示:
要真正的使用路由,向浏览器(客户端),返回服务器(服务端)的HttpResponse 一个响应数据
例如在一个名为 sales 的 app 内的 view.py 文件内,创建如下listorders() 函数
# sales app ——> views.py
from django.http import HttpResponse
def listorders(request):
return HttpResponse("下面是系统中所有的订单信息。。。")
# config ——> urls.py 主路由
from django.contrib import admin
from django.urls import path
# 别忘了导入 listorders 函数
from sales.views import listorders
urlpatterns = [
path('admin/', admin.site.urls),
# 添加如下的路由记录
path('sales/orders/', listorders),
]
上面的引用,我倒是不怎么清楚,会不会自动加载,不过一般而言我是比较建议,代码改了,还是要重启下比较舒服些。
在用 Pycharm 启动 config 项目后,点击蓝色 127.0.0.1:8000 ,会弹出一个报错,这是因为没有设置一个路由的问题,直接在 浏览器的 url 栏内输入 127.0.0.1:8000/sales/orders/
注意端口,需不需要加
还有发现其实可以这样输入的 127.0.0.1:8000/sales/orders
因为浏览器会自动补全 / 斜杠的
正确结果如下所示:
所以浏览器最终显示的就是 我们 listorders 函数返回的字符串。
注意:
2.5.2.2.2 路由子表 urls.py 和 主路由表 urls.py
url 路由表就是可以像上面这样,一个请求对应一个处理函数。
但是有的时候,我们的项目比较大的时候, 请求的 url 会特别多。
比如我们的系统提供给 客户、销售商、管理员 访问的 url 是不一样的,如下:
customer/
customer/orders/
sales/
sales/orders/
mgr/
mgr/customers/
mgr/medicines/
mgr/orders/
复杂的系统url条目多达几百甚至上千个, 放在一个主路由表 urls.py 文件内,查看时,要找一条路由记录就非常麻烦。
这时,我们通常可以将不同的路由记录 按照功能 分拆到不同的 url 路由子表 文件中。—— app 文件夹内创建一个新的 urls.py 文件
Pycharm 创建 urls.py 文件:右键点击 app 名字,选择 New ,Python File
然后在这个 sales\urls.py 文件中输入如下内容
# sales ——> urls.py
# 导入 Django 的 urls 模块
from django.urls import path
# 先 sales.urls.py ——> 后 sales.views.py
# . 代表 当前 app 文件夹内,导入 views.py 文件
from . import views
urlpatterns = [
path('orders/', views.listorders),
]
然后,我们再修改主 url 路由文件 config/urls.py , 如下
# config ——> urls.py 主路由
from django.contrib import admin
# path 后导入一个include函数
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# 凡是 url 以 sales/ 开头的,
# 都根据 sales.urls 里面的 sales app 的子路由表进行路由查询
path('sales/', include('sales.urls')),
]
2.5.2.3 总结 Django 的路由知识
我理解路由的重点在于:include() 和 函数,有 include 则 查询 对于 app 子路由文件 urls.py ,没有则执行指定的函数,处理请求
2.6 Django 的配置文件 setting.py
个人理解:
后端开发的本质上就是在传输图片、声音、视频、文本等等的数据,将它们序列化(也就是转变成 二进制 或者 说是字节码,这里转化的过程应该是用到了 Unicode 编码来对这些数据进行一个序列化,Unicode 编码 也被叫做 UTF-8 编码,注意这里的 8 指的是 8 bit (比特) ),这样序列化且转换成 Unicode 编码,可以方便传输数据。
因此,对于这些数据,自然也就是由后端开发来进行数据管理操作——增(INSERT)、删(DELETE)、查(SELECT)、改(UPDATE)
特别要注意的是:图片、声音、视频这类数据比较特殊,所以一般都是统称为资源文件,会单独放在一个单独的目录文件夹内,数据库不会将它们放在数据库里面的,数据库通常都是存储文本类的数据——如资源文件的文件地址(图片、声音、视频文件),其他的文本数据。
初始化过程
下面删除了之前演示的名为 sales 的 app
urls 路由删除
2.6.1 如何连接 MySQL 数据库及修改格式、时区配置
就目前来说,业界最广泛使用的数据库还是:关系型数据库。
关系型数据库系统,常用的开源数据库有 mysql 和 postgresql。
建议大家实际工作中使用的时候,使用上面这两种。
如果觉得用MySQL嫌麻烦的话,可以先看 Django框架默认数据库 sqlite 的相关教程:Django 默认的 sqlite 数据库
2.6.1.1 连接 MySQL 数据库配置及数据库引擎的安装
2.6.1.1.1 连接 MySQL 数据库配置
在文件内找到数据库配置,注释 sqlite 数据库默认配置 ,添加 MySQL 数据库的配置
# config.setting.py
# Database
# MySQL 数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 默认
'NAME': 'hmsys', # 连接的数据库名
'USER': 'root', # mysql的用户名
'PASSWORD': 'root@1234', # mysql的密码
'HOST': '127.0.0.1', # mysql的ip地址
'PORT': 3306, # mysql的端口
}
}
2.6.1.1.2 数据库引擎的安装
虽然配置文件配置好了,但是要想成功使用 MySQL 数据库,就需要安装 MySQL 的数据库引擎 ENGINE,否则会报错。
这里需要使用命令行安装数据库引擎,用 Pycharm 安装挺麻烦的。
这里举例方便理解:进入我之前创建的虚拟环境 hmsys,输入如下命令:
pip3 install pymysql
然后在 Django 项目下的 init.py 文件内加入如下内容:
目前的示例项目为 config
# config.__init__.py
"""
setting中的配置默认为sqlite3数据库 当需要修改成MySql时
并且在setting.py的同级目录的__init__.py 加入如下配置
否则会报错: Error loading MySQLdb module.
"""
import pymysql
pymysql.install_as_MySQLdb()
参考链接:Django 的 MySQL 数据库配置教程
2.6.1.2 修改中文格式、时区的配置
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
# 默认 英文 格式
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans' # 设置为中文格式
# 默认时区
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai' # 修改时区
USE_I18N = True
USE_L10N = True
# USE_TZ = True
USE_TZ = False # 可以被自定义转换
# 在用 MySQL 做数据库,且django设置 USE_TZ=True 时,
# 会遇到一个问题,就是按月份或日期筛选 model 数据时只能得到空集
2.6.2 修改 Static 静态文件路径和 media 上传路径配置
链接:os.path.abspath用法
链接:关于 join 和 os.path.join 的理解
# 定义静态文件所在目录
STATIC_URL = '/static/'
# 报过错的位置 ##
STATIC_ROOT = os.path.join(BASE_DIR, '/static/')
# #
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"), # 绝对路径/static/
)
# 定义上传图片文件所在目录
# 此为指定上传的图片路径前缀
MEDIA_URL = "/media/"
# 绝对路径 /media/
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
报过的错:
ERRORS: ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT settin
os.path.dirname用法
python中的os.path.dirname(file)的使用
2.7 Django 框架重要命令 makemigrations、migrate、createsuperuser
makemigrations # 先把 model 文件,建表的 SQL 语句整理出来
migrate # 之后连接数据库成功后,执行整理好的 SQL 语句
createsuperuser # 创建超级管理员账户
理解 Django 的 makemigrations 和 migrate
Django创建超级管理员
在 Pycharm 里面点击红色框内选项,在下方弹出界面输入 此三个 命令,等同于 python manage.py 命令
三条命令输入后:打开浏览器,在后面输入 admin/
就会弹出一个用户登录界面
用户密码,就是 createsuperuser 时配置的账号和密码,密码随意,只要到时 y 就行了,邮箱随意。
结果如下:
好了,Django 框架的基本使用方法,还有坑的总结就差不多这样了,后续会再补充下其他的。
END
参考链接