目录
一、项目整体框架
Django采用的是MTV的架构。即,
Model(模型):数据库对象(数据来源)。
Template(模板):用户看到的画面(动画、输入框等)。
View(视图):业务处理(前端的数据存储在数据库;查询的数据返回给前端)。
urls分发器(路由):连接前后端。
三个模块与路由的关系:浏览器输入url路由,初始化界面时(刷新),经过url分发器,view的get()方法处理,操作model,数据传给template;前端提交数据时,通过ajax设定的url,匹配该url分发器对应的view处理,操作model。
如下图,该项目有三个文件夹(.vscode、myApp、myProject)和一个执行py文档(manage.py)
说明:.vscode文件夹主要针对vscode软件的使用。
接下来几节内容,将详细的讲解图中这几个模块。
二、myProject 文件夹
主要针对 settings.py 和 urls.py 这两个重要模块讲解。
(一)settings.py 作用
settings.py 主要针对项目的基础配置。一旦建立好里面的内容,后面大概率是不会更新修改。
1. 链接数据库
以链接postgreSQL数据库为例。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'PORT': '5432',
'NAME': 'MyDB',
'USER': 'postgres',
'PASSWORD': 'admin',
'HOST': 'XX.XXX.X.X',
},
}
postgreSQL数据库的常用操作软件是PgAdmin,可参考另一篇文章:Backend - PgAdmin(PostgreSQL 工具)-CSDN博客
2. BASE_DIR
设置项目文件夹所在的绝对位置。
BASE_DIR = Path(__file__).resolve().parent.parent
3. DEBUG
(1)开发/测试环境
# 允许debug
DEBUG = True
# 设置可请求访问的 IP
ALLOWED_HOSTS = [] # 可以默认为空。或 = ['127.0.0.1', 'localhost']
(2)生产环境
# 禁止 debug
DEBUG = False
# 设置可请求访问的 IP
ALLOWED_HOSTS = ['*'] # 允许所有 IP 地址
4. 注册应用app
INSTALLED_APPS = [
# 创建项目时,即存在
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 开发时,添加应用
'admin_reorder', # Django Admin 后台管理
'myApp', # Django application 项目应用
]
5. 中间件middleware
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', # 开启网络安全保护
'django.contrib.sessions.middleware.SessionMiddleware', # 开启session缓存,缓存请求和响应数据,以提高性能和减少响应时间
'django.middleware.common.CommonMiddleware', # 通用中间件,可自动为URL路由添加www前缀和斜杠后缀
'django.middleware.locale.LocaleMiddleware', # 开启多语言
'django.middleware.csrf.CsrfViewMiddleware', # 开启跨域请求伪造的安全防御
'django.contrib.auth.middleware.AuthenticationMiddleware', # 验证用户身份(request.user)、授予或拒绝访问权限
'django.contrib.messages.middleware.MessageMiddleware', # 消息中间件,开启cookie或会话的消息
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
6. 模板templates
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', # 模板的引擎
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 模板文件所在目录 BASE_DIR/templates
'APP_DIRS': True, # 是否在应用App中的templates目录里查找模板
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.i18n', # 多语言(i18n上下文渲染器)
],
},
},
]
7. 后台 admin 管理
ADMIN_REORDER = (
{'app': 'auth',
'label': _('Auth Part'),
'models': ('auth.User', 'auth.Group',),
},
{'app': 'myApp',
'label': _('Book Part'),
'models': ('myApp.BookType',),
},
)
可参考另一篇文章:Backend - Django Admin 后台管理_django admin orderby-CSDN博客
8. 多语言
可参考另一篇文章:Backend - Django 多语言-CSDN博客
9. 静态文件路径前缀
STATIC_URL = 'static/'
10. SASS 样式文件设定
使用SASS文件,参考另一篇文章: Frontend - SASS / SCSS 文件使用-CSDN博客
11. 主键的默认类型
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
(二)urls.py 作用
urls.py 主要针对views视图文件、多语言文件等路由的配置。
注意:为了方便项目管理,可以在myApp目录下创建urls文件夹,放置不同功能的url。
# 1. myProject/urls.py文件
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('myApp/', include('myApp.urls.book_url')), # myApp文件夹下创建一个urls文件夹,放置所有url文件
]
# 2. myApp/urls文件夹下
# (1) 创建__init__.py 文件
# (2) 创建book_url.py文件, 内容如下:
from django.urls import path
from myApp.views import views_book
from django.contrib.auth.decorators import login_required
urlpatterns = [
path('url_book_create/', login_required(views_book.BookCreate.as_view()), name='url_book_create'), # book create
]
三、myApp 文件夹
主要包括 urls 路由文件、views 视图文件、templates 模板文件、models 数据库模型文件、migrations 迁移文件、static 静态文件。如图,左边是创建Django项目时自动创建的文件(蓝色方框),右边是整理后的文件(黄色方框)。
(一)apps.py 作用
配置该应用的基础信息。
# myApp/app.py
from django.apps import AppConfig
class MyappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'myApp'
同时,settings.py里要注册该APP。
# myProject/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp', # 注册项目APP
]
(二)urls 文件夹
手动创建的新文件夹。用于统一存放 urls 路由文件。
注意:需要新增一个__init__.py 初始化文件(空文件,无需开发内容,但必须存在该文件)。
myApp/urls文件夹下
# (1) 创建__init__.py 文件
# (2) 创建book_url.py文件, 内容如下:
from django.urls import path
from myApp.views import views_book
from django.contrib.auth.decorators import login_required
urlpatterns = [
path('url_book_create/', login_required(views_book.BookCreate.as_view()), name='url_book_create'), # Book create
]
还需要在myProject目录下的 urls.py 文件引入(该篇文章前面的第二节中有讲过)。
(三)views 文件夹
手动创建的新文件夹。用于统一存放 views 视图文件。
注意:需要新增一个__init__.py 初始化文件(空文件,无需开发内容,但必须存在该文件)。
# myApp/views/views_book.py
from django.views import View
from django.shortcuts import render
class BookCreate(View):
def get(self, request):
return render(request, 'book/book_create.html', {})
def post(self, request):
pass
# myApp/urls/book_url.py文件
urlpatterns = [
path('url_book_create/', login_required(views_book.BookCreate.as_view()), name='url_book_create'), # book create
]
(四)templates 文件夹
手动创建的新文件夹。用于统一存放 templates 模板文件。
1. base.html
{% load static %}
<!--<!DOCTYPE html>-->
<html lang="en">
<meta charset="utf-8"/>
<head>
<title>Test</title> <!--网页的标题-->
<link rel="shortcut icon" href="{% static 'images/favicon.ico' %}"/> <!--网页的小图标,若不引入图片,也不影响项目运行-->
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.min.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'css/jquery.dataTables.min.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'css/base.css' %}"/> <!--自定义的base.css文件-->
<script type="text/javascript" src="{% static 'js/jquery-3.1.1.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/jquery.dataTables.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/dataTables.bootstrap.min.js' %}"></script>
</head>
<body id="body">
<div>{% block content %} {% endblock %}</div> <!--用于放置不同的html模板文件-->
</body>
<script>
</script>
</html>
2. 模板文件
{% extends "base.html" %} <!--继承base.html-->
{% load static %}
{% block content %} <!--对应base.html的body内容部分start-->
<div id="main">
<div><h1>Book</h1></div>
<div>去有风的地方,遇见你~~<div>
</div>
<script type="text/javascript">
<!--用于设置本页面的动态操作-->
</script>
{% endblock %} <!--对应base.html的body内容部分end-->
(五)models 文件夹
手动创建的新文件夹。用于统一存放 models 数据库模型文件。
注意:需要新增一个__init__.py 初始化文件(空文件,无需开发内容,但必须存在该文件)。
可参考另一篇文章:Backend - Django Model-CSDN博客
(六)migrations 文件夹
创建项目时自动创建的文件夹。用于统一存放 migrations 迁移文件(每次执行迁移命令时,就会自动生成一个新的迁移文件,所有迁移文件得保留,不要删除,否则会影响下次的迁移) 。
(七)static 文件夹
手动创建的新文件夹。用于统一存放 css、js、images等静态文件。
四、manage.py
作用:启动程式;迁移数据库等
如,执行启动程式命令:
python manage.py runserver
迁移数据库命令:
# 生成迁移文件
python manage.py makemigrations
# 执行迁移
python manage.py migrate
五、.vscode 文件夹
具体介绍,可参考另一篇文章:VSCode & PyCharm-CSDN博客
六、环境搭建 & 项目创建
参考另一篇文章:虚拟环境配置(python 安装、Django等依赖安装、创建&运行Django等)_python虚拟环境安装库-CSDN博客