Django4.2 学习 - 快速入门(一)

1. 背景

由于公司的自动化工具是 Django 写的,之前一直用 Flask,对 Django 了解一点,但不多,现在学习一下,不忙的时候可以维护一下自动化项目,加一点新功能。

2.Django 版本介绍

Django 官网:

https://docs.djangoproject.com/zh-hans/4.2/

Django release roadmap

LTS 版本的意思是 long-term support,长期支持版本(3 年),所以建议企业级的项目尽量选用 LTS 版本。

3.python 虚拟环境复习

点击跳转

4. 在虚拟环境中安装 Django

1
pip install django==4.2.17

5. 创建 Django

1️⃣命令创建

1
django-admin startproject HelloDjango

2️⃣使用 Pycharm 创建

image-20250107111708333

3️⃣目录结构

manage.py

  • Django 用于管理本项目的命令工具,之后进行站点运行,数据库自动生成等,都是通过本文件完成。

__init__.py

  • 告诉 python 该目录是一个 python 包,暂无内容,后期一些工具的初始化可能会用到。

settings.py

  • Django 项目的配置文件,默认状态其中定义了本项目的组件,项目名称,数据库,静态资源等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
"""
Django settings for DjangoPro2 project.

Generated by 'django-admin startproject' using Django 5.1.4.

For more information on this file, see
https://docs.djangoproject.com/en/5.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.1/ref/settings/
"""

from pathlib import Path

# 项目根目录
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
# 项目密钥,内部加解密用
SECRET_KEY = 'django-insecure-ai-_w&uuggfj-1hhx=eze!wnwv6ob0cw2k*$r1=x)ixt%1@gbd'

# SECURITY WARNING: don't run with debug turned on in production!
# 是否启用调试模式
# True一般用于开发过程中使用,调试模式服务会自动重启,不用手动在去重启
# False一般用于上线部署
DEBUG = True

# 被允许的域名或IP
# * :表示通配符,匹配所有IP
# 上线后,可以试试 指定本地 ip,看看外网 ip 是否可以访问的到
ALLOWED_HOSTS = ['*']


# Application definition
# 定义应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 定义自己的应用,需要添加到这里,使用pycharm 创建的,则会自动添加
'user.apps.UserConfig',
]

# 中间件,定义自己的中间件,需要在这里注册
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 根路由
ROOT_URLCONF = 'DjangoPro2.urls'

# 模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates']
,
'APP_DIRS': True,
'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',
],
},
},
]

# wsgi目录
WSGI_APPLICATION = 'DjangoPro2.wsgi.application'


# Database
# https://docs.djangoproject.com/en/5.1/ref/settings/#databases
# 数据库
DATABASES = {
'default': {
# 只能用关系行数据库
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}


# Password validation
# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators
# 密码验证
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]


# Internationalization
# https://docs.djangoproject.com/en/5.1/topics/i18n/
# 国际化

LANGUAGE_CODE = 'en-us' # 'en-us'英语, zh-hans 中文,在后台管理系统中生效

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.1/howto/static-files/
# 静态文件(CSS,JavaScript, Images等)
STATIC_URL = 'static/'

# Default primary key field type
# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field
# 默认主键字段类型
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

urls.py

  • 维护项目的 URL 路由映射,即定义当客户端访问时,由哪个模块进行响应。

wsgi.py

  • 全称为 Python Web Server Gateway Interface,即 Python 服务器网管接口,时 Python 应用与 Web 服务器之间的接口,用于 Django 项目在服务器上的部署和上线,一般不需要修改。

asgi.py

  • 定义 ASGI 的接口信息,和 WSGI 类似,在 3.0 以后新增,相比 ASGI 实现了异步处理,用于启动异步通信服务,如:实现在先聊天等异步通讯功能。(类似 Tornado 异步框架)

6. 测试服务器的启动

1
2
3
4
5
6
7
# 默认端口(8000)启动
python manage.py runserver
# 指定端口启动
python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8001 # 允许局域网其他 ip 访问
python manage.py runserver 127.0.0.1:8002
# 在 settings.py 中,将ALLOWED_HOSTS=['*']中加个*号

7. 数据迁移

迁移的概念:就是将模型映射到数据库的过程

生成迁移文件:

1
python manage.py makemigrations

执行迁移:

1
2
# 首次执行时,会有框架默认的东西如auth_group/auth_user自带后台管理相关
python manage.py migrate

与 flsk 不同,不需要初始化迁移文件夹,每个应用默认有迁移文件夹 migrate

8. 创建应用

1
2
# 创建名称为 AppName 的应用
python manage.py startapp AppName

使用命令创建应用后,需要在 settings.py 中注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# ......

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 自动生成
'user.apps.UserConfig',

# 通过命令创建的项目需要在这里注册
'AppName',
]
# ......

应用目录介绍:

__init__.py

  • 告诉 python 该目录是一个 python 包,暂无内容,后期一些工具的初始化可能会用到。

admin.py

  • 管理站点模型的声明文件,默认为空。(后台管理系统)

apps.py

  • 应用信息定义文件,在其中生成了 AppConfig,该类用于定义应用名等数据

models.py

  • 添加模型层数据类文件

views.py

  • 定义 URL 相应函数,视图函数

migrations 包:

  • 自动生成,生成迁移文件的

tests.py

  • 测试代码文件,写单元测试用

9. 基本视图

1️⃣在 views.py 中创建一个路由响应函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.http import HttpResponse
from django.shortcuts import render


# Create your views here.
# 视图函数
def index(request):
# return HttpResponse("Hello, Django!.")

# 渲染render,渲染 html
return render(request, 'index.html')


def index2(request):
return HttpResponse('我是index2')

2️⃣在根路由 urls.py 中进行注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""
URL configuration for DjangoPro2 project.

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import include, path
from user.views import *

urlpatterns = [
path('admin/', admin.site.urls),
# 直接访问视图函数
# path('index/', index),

# path('index2', index2)

# 包含user的url,子路由写法
path('user/', include('user.urls'))
]

3️⃣子路由 urls.py 中注册

1
2
3
4
5
6
7
8
9
10
from django.urls import path

from user.views import *

urlpatterns = [
path('index/', index, name='index'),

path('index2/', index2, name='index2'),
]

4️⃣通过子路由访问(2 层)

1
2
3
http://127.0.0.1:8000/user/index2/

http://127.0.0.1:8000/user/index/

10. 基本模板

模板实际上就是我们用 HTML 写好的页面
创建模板文件夹 templates,在模板文件夹中创建模板文件
views.py 中渲染模板,使用 render 函数:

1
2
# 渲染render,渲染 html
return render(request, 'index.html')

11. 定义模型

1
2
3
4
5
6
7
8
9
10
11
from django.contrib.auth.models import AbstractUser
from django.db import models

# Create your models here.
# 类变量对应数据库中的字段
# 所有的类都需要继承 models.Model
class User(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField(default=18)
sex = models.IntegerField(default=1)
is_delete = models.BooleanField(default=False)

12.Admin 后台管理

1️⃣在 admin.py 中 model 加入后台管理:

1
2
3
4
5
from django.contrib import admin
from user.models import User
# Register your models here.
# 在这里注册
admin.site.register(User)

2️⃣创建超级用户:

1
python manage.py createsuperuser

3️⃣访问 admin 后台:

http://127.0.0.1:8000/admin

13. 相关参考

https://www.bilibili.com/video/BV1W34y1c7Rn?spm_id_from=333.788.player.switch&vd_source=fd555860cd7cf9b09d9279e5deaabb9d&p=15