课程简介
2025年全网最新 Django 框架系列课程。Django 是目前主流的网站后端框架,如果你想用 Python 开发网站后端,那么了解这个框架是很有必要的。

资料源码
1.视频地址:https://www.bilibili.com/video/BV1nNr7YZESq
2.Django 官方文档:https://docs.djangoproject.com/zh-hans/5.0/
3.软件使用:Miniconda3、Pycharm 专业版、Postman
个人笔记
1.Django 框架快速搭建
(1)推荐用 Miniconda3 配合 Pycharm 专业版,来创建项目。Python 版本3.10即可,Django 版本5.2.9即可。(注意 Django 版本对 Python 版本是有最低要求的,但各个 Django 版本差别其实不大,选自己喜欢的版本就行)
(2)常用 Conda 命令:
1.查看conda版本:
conda -V
2.创建python虚拟环境:
conda create -n env_name python=3.10
3.查看有哪些虚拟环境(带星号“*“的表示当前环境):
conda info -e
4.激活虚拟环境:
conda activate env_name
5.删除虚拟环境:
(1)以下命令可将该虚拟环境及其安装的包都删除:
conda remove --name env_name --all
(2)只删除虚拟环境中的某个包:
conda remove --name env_name package_name
更多 Conda 命令:https://www.cnblogs.com/jelly12345/p/18977804
(3)Django 命令:
1.创建项目
django-admin startproject mysite
2.创建应用
python manage.py startapp blog
3.生成迁移文件
python manage.py makemigrations
4.执行迁移
python manage.py migrate
5.创建管理员用户
python manage.py createsuperuser
6.启动开发服务器
python manage.py runserver
更多命令:https://www.cnblogs.com/yanpeng1535/p/18529794
(4)Pycharm 保存 Django 的运行参数(以后直接运行 manage.py 文件即可打开网站):①先运行一下 manage.py ,出错后不用管,点击 Pycharm 右上角的 “编辑配置”,填入运行的参数即可(如下图)。

(5)Django 项目目录与常用命令:https://docs.geeksman.com/python/Django/03.python-django-directories.html
2.Django 基础
(1)路由分层。
①为了防止功能增加时项目混乱,务必要学会。其实就是将不同子应用的 urls.py 传到总的 urls.py 中,进行统一管理。需要在子应用中创建自己的 urls.py 和 views.py 文件。
②路由进阶:正则路由(re_path)和路由转换器(converters,register_converter)。
# 正则路由
# (?P<uid>\d+) 是命名捕获组,固定写法(取个名字而已)
re_path(r"^info/(?P<uid>\d+)/$", views.info)
提示:关于url地址最后面加不加斜杠“/”,前后端分离的项目无所谓,但前后端不分离的项目不能加,会导致静态资源出错!
(2)request 请求。
①只要了解 get、post 这两种主要的就行,其它方式基本用不上,例如:patch、delete。 get 的参数在 url 后面,而post 的参数在请求体中(网址更加简洁好看)。
②查询字符串。就是 url 地址 "?" 后面的内容,例如:https://www.ifree6.cn/login?name=8117&pwd=edit(黄色字体)。
# 获取单个查询参数
print(request.GET.get("name"))
# 获取多个查询参数,结果是个列表
print(request.GET.getlist("nlist"))
(3)响应。
①响应 html 数据。用于前后端在一起的项目。
②响应 json 数据。多用于前后端分离的项目。常用的 json 方法有:json.loads(request.body) → 解析 POST/PUT 的 JSON body。json.dumps(data)→ 返回 JSON 字符串。但 Django 自带了 JsonResponse() 方法,功能一样且更简洁,需要从 django.http.response 引入。如果要传入列表形式的字典,需要添加参数 “safe=False”。
③响应头自定义。建议用英文和英文符号,不能用中文这种多字节字符!示例:
def index4(request):
response = HttpResponse("自定义响应头")
response["company"] = "tencent.com"
print(response)
return response
(4)跳转与重定向。
from django.http.response import HttpResponseRedirect, HttpResponsePermanentRedirect
def index5(request):
# 站外跳转 或 重定向(临时/永久)
url = "https://www.tencent.com" # 访问 “index5” 页面会直接跳转到腾讯官网
return HttpResponseRedirect(url)
from django.shortcuts import redirect, render
def index6(request):
# 站内跳转 或 重定向(临时/永久)
return redirect("/")
(5)会话控制。当前主要为 session 和 token,而 “cookie” 和 “url 参数” 已属于老技术了。
(6)settings.py 配置文件解读。参考:https://geekdaxue.co/read/wangzhe0912@aa2c84/language_django_settings
(7)模板语法。前后端分离项目用不上。①变量;② if 循环;③ for 循环;④过滤器;⑤模板继承。
(8)视图(views.py)进阶。
(9)中间件(middleware)。有用户认证、session控制、网站安全等功能。分为“函数中间件”和“类中间件”。
2.数据库
有两种,一种是关系型数据库,重点了解下 mysql 和 PostgreSQL(超大型网站用 Oracle,例如淘宝);另一种是非关系型数据库,主要了解 Redis 和 MongoDB 即可。
(1)ORM框架。这是一个方便开发者在 python 中操作数据库的框架,不需要写原生的 SQL 语句,就能操作数据库,即使更换数据库也不需要重写新的操作数据库代码,因为完全兼容,十分方便。
(2)连接 mysql 数据库。
①先在电脑上安装 mysql 程序(配置好),再在项目中用 pip 安装 "pymsql" 驱动包;然后在项目主应用的 “__init__.py” 文件内添加如下代码:
# 让 mysql 以 mysqlDB 的方式对接 ORM
from pymysql import install_as_MySQLdb
install_as_MySQLdb()
②在终端中登录数据库,创建一个数据表,比如 school ;
# 显示数据库(所有语句结束要加分号)
show databases;
# 删除数据库
drop database school;
# 创建数据库
create database school;
③修改 "settings.py" 的数据库配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'school',
'HOST': 'localhost',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '1234',
'POOL_OPTIONS':{
'POOL_SIZE':10,
'MAX_OVERFLOW':30,
}
}
}
④往子应用的 models.py 中写入代码,
from django.db import models
# Create your models here.一个表可加多个索引
class Student(models.Model):
MEMBERSHIP = (
(1,"普通用户"),
(2,"黄金会员"),
(3,"超级会员"),
(4,"系统管理员"),
)
name = models.CharField(max_length=15,db_index=True,verbose_name="姓名")
age = models.IntegerField(null=True,verbose_name="年龄")
gender = models.BooleanField(default=True,verbose_name="性别")
classmate = models.CharField(max_length=50,default="",verbose_name="班级")
desc = models.TextField(null=True,verbose_name="个性签名")
weight = models.DecimalField(max_digits=5,decimal_places=2)
membership = models.IntegerField(choices=MEMBERSHIP,default=1)
class Meta:
db_table = "student"
verbose_name = "学生表" # 在admin后台显示的名称
并在终端中执行下面的命令,以便在 mysql 中生成你需要的表:
python manage.py makemigrations
python manage.py migrate
往数据库插入模拟数据:
INSERT INTO school.student (name, gender, age, classmate, `desc`, weight, membership) VALUES
('王建华', 2, 16, '高二(10班)', '有限这样合作一次网站认为其中一些!', 99, 1),
('贺辉', 1, 15, '高二(1班)', '联系以后因此!', 63, 3),
('赵英', 1, 16, '高一(5班)', '同时语言特别以及!', 74, 2),
('栾坤', 1, 18, '高三(2班)', '责任那些回复部门对于!', 69, 2),
('张玲', 2, 15, '高一(6班)', '看到发展推荐威望服务一切注册信息!', 82, 3),
('李桂香', 2, 16, '高一(6班)', '孩子投资中国!', 66, 2),
('李利', 2, 19, '高二(2班)', '阅读以后科技登录安全学生详细!', 72, 3),
('郭红霞', 2, 19, '高三(2班)', '得到可以没有规定次数由于提高!', 100, 1),
('蔡凤英', 2, 16, '高一(8班)', '组织一切出现价格一下有些!', 60, 3),
('蒋秀华', 1, 15, '高一(5班)', '地址登录活动!', 88, 2),
('邱宇', 1, 20, '高二(9班)', '有些因此其实!', 95, 2),
('周红梅', 1, 17, '高一(10班)', '资料首页得到所以软件类型!', 85, 3),
('刘瑜', 2, 19, '高一(2班)', '地区那些拥有增加工作表示!', 80, 2),
('林艳', 1, 15, '高一(6班)', '留言这是成为音乐之后完全!', 59, 3),
('魏燕', 1, 15, '高三(4班)', '如何一样如此那些资料规定!', 91, 1),
('黄荣', 2, 18, '高三(6班)', '评论朋友登录拥有!', 53, 3),
('尹超', 2, 18, '高二(4班)', '解决法律电子注意!', 74, 1),
('姜金凤', 2, 19, '高三(1班)', '一次组织因为资源相关的话手机当前!', 57, 3),
('李坤', 2, 19, '高二(2班)', '一次注意用户同时!', 90, 1),
('陈鑫', 2, 20, '高三(7班)', '部分方法欢迎空间还有发展阅读!', 78, 3),
('黄凤兰', 2, 15, '高三(4班)', '全国操作其中精华!', 81, 1);
往前端返回数据:
from django.views import View
from student.models import Student
from django.http import JsonResponse
class StudentView(View):
def get(self,request):
# 获取 数据库-学生表 里的所有数据
student_list = Student.objects.all()
# django不能直接返回python对象给前端,要先将数据转化成字典再返回出去,
# 因此要对python数据对象进行遍历,保存到列表中。
# 方法一:创建一个列表,再用for循环遍历
'''
data =[]
for student in student_list:
data.append({
'id':student.id,
'name':student.name,
'age':student.age,
'gender':student.gender,
'classmate':student.classmate,
'desc':student.desc,
'weight':student.weight,
'membership':student.membership,
})
'''
# 方法二:直接用列表推导式,简化
data = [{
'id':student.id,
'name':student.name,
'age':student.age,
'gender':student.gender,
'classmate':student.classmate,
'desc':student.desc,
'weight':student.weight,
'membership':student.membership,
} for student in student_list]
return JsonResponse(data,safe=False,json_dumps_params={'ensure_ascii': False}) # 返回给前端的内容是二进制
# 'ensure_ascii': False 表示不把中文等非ASCII字符转成 \uXXXX转义形式,直接输出原始中文。








暂无评论内容