学习课程地址:https://www.bilibili.com/video/BV1NL41157ph
1.安装Django
pip install django
2.创建项目
- 方法1:使用命令行创建
django-admin startproject learn_demo[项目名称]
- 方法2:使用PyCharm新建项目时选择Django
3.项目文件介绍
learn_demo
├─manage.py [项目的管理,启动、创建app、数据管理]
└─learn_demo
├─asgi.py [接受网络请求,异步请求]
├─settings.py [项目配置]
├─urls.py [url和函数的对应关系]
├─wsgi.py [接受网络请求,同步请求]
└─__init__.py
4.创建APP
python manage.py startapp app01
app01
├─admin.py [django默认提供的admin后台管理]
├─apps.py [app启动类]
├─models.py [数据库操作]
├─tests.py [单元测试]
├─views.py [视图函数]
├─__init__.py
└─migrations [数据库变更记录]
└─__init__.py
5.运行Django
-
在【settings.py】中注册app
- 在【urls.py】编写URL和视图函数对应关系
- 在【urls.py】编写URL和视图函数对应关系
-
在【views.py】编写视图函数
- 启动Django项目
-
命令行启动
python manage.py startserver
-
PyCharm启动
-
6.模板和静态文件
6.1添加前端页面(templates)
在【views.py】和【urls.py】中创建视图函数映射,同时使用render返回指定前端页面。
render函数会在templates目录中寻找前端页面。
templates目录可以存在于项目根目录或者app目录之下,根目录下的templates需要在【settings.py】文件中配置方可生效,各app目录下的templates目录会按照【settings.py】文件中注册顺序依次寻找。
6.2静态文件处理
在app目录下创建static目录,所有的静态文件(css、img、js等)均可通过此目录进行管理,在前端页面中使用{% load static %}
的方式导入,使用{% static 'img/1.png' %}
使用static目录下的静态文件。
7.模板语法
7.1占位符
{{ }}
包含变量
{% %}
包含语句
{# #}
包含注释
html中使用一些占位符,再通过render函数进行渲染。
7.2循环与分支结构
7.3新闻展示案例
8.登陆案例
### 9.数据库操作
9.1数据库连接模块
pip install mysqlclient
9.2连接数据的配置
在【settings.py】文件中修改数据库配置
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "mydatabase",
"USER": "mydatabaseuser",
"PASSWORD": "mypassword",
"HOST": "127.0.0.1",
"PORT": "3306",
}
}
数据库配置官方文档:https://docs.djangoproject.com/en/4.2/ref/settings/#databases
9.3使用ORM创建表
在【models.py】文件中创建表类
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
python manage.py makemigrations
python manage.py migrate
注意:django最新版本为4.2(2023-06-25),要求MySQL版本在8.0以上,4.0版本的django要求MySQL版本在5.7以上。
9.4使用ORM修改表结构
在【models.py】文件中通过修改类,然后使用manage命令,即可完成对表结构的调整。
在增加表字段时,注意需要指定默认值或在命令行填入默认值,或者设置可为空。
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
data = models.CharField(max_length=32, \
null=True, blank=True) # 设置可为空
size = models.IntegerField(default=0) # 设置默认值
python manage.py makemigrations
python manage.py migrate
9.5使用ORM增删查改
def orm(request):
# 1.增加数据
Department.objects.create(title="销售部")
Department.objects.create(title="IT部")
Department.objects.create(title="运营部")
UserInfo.objects.create(name="张三", password="asc")
UserInfo.objects.create(name="李四", password="1234")
UserInfo.objects.create(name="王五", password="0987")
return HttpResponse("Successful!")
def orm(request):
# 2.删除数据
UserInfo.objects.filter(id=2).delete()
Department.objects.all().delete()
return HttpResponse("Successful!")
def orm(request):
# 3.获取数据
# 返回一个QuerySet类型,类似一个列表,每一项包含数据每一行数据
data_list = UserInfo.objects.all()
s = ""
for obj in data_list:
s = f"{s} {obj.name} {obj.password} {obj.age}"
return HttpResponse(f"{s}")
def orm(request):
# 4.更新数据
UserInfo.objects.filter(id=1).update(password=1234)
return HttpResponse("successful!")
10.用户管理案例
页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Info LIST</title>
<style>
table, td, th {
border: 1px black solid;
border-collapse: collapse;
}
th, td {
width: 4em;
height: 2em;
text-align: center;
}
input {
height: 2em;
font-size: 1em;
}
</style>
</head>
<body>
<h1>Info LIST</h1>
<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>password</th>
<th>age</th>
</tr>
</thead>
<tbody>
{% for obj in data_list %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
<td><a href="http://localhost:8000/info/del?nid={{ obj.id }}">delete</a></td>
</tr>
{% endfor %}
</tbody>
</table>
<br>
<form method="post" action="http://localhost:8000/info/add">
{% csrf_token %}
<label for="name">name: <input type="text" name="name"></label>
<label for="password">password: <input type="password" name="password"></label>
<label for="age">age: <input type="number" name="age"></label>
<input type="submit" value="submit">
</form>
</body>
</html>
10.1显示用户
def info_list(request):
data_list = UserInfo.objects.all()
return render(request, "info_list.html", {"data_list": data_list})
10.2添加用户
def info_add(request):
data = request.POST
name = data["name"]
password = data["password"]
age = data["age"]
UserInfo.objects.create(name=name, password=password, age=age)
return redirect("http://localhost:8000/info/list")
10.3删除用户
def info_del(request):
nid = request.GET["nid"]
UserInfo.objects.filter(id=nid).delete()
return redirect("http://localhost:8000/info/list")