初识django
1. 安装Django
pip install django
c:\python39
- python.exe
- Scripts
- pip.exe
- django-admin.exe [工具,创建django项目中的默认文件和文件夹]
- Lib
- 内置模块
- site-packages
- flask
- pymql
- django [框架的源码]
2. 创建项目
django项目中会有一些默认的文件和文件夹
(本人用的专业版pycharm,直接就能创建)
默认项目的文件介绍:
mysite
|-- manage.py 【项目的管理,启动项目,创建app,数据管理】【***常常用***】
|-- mysite
|
|-- __init__.py
|-- urls.py 【url和函数的对应关系】【***常常修改***】
|-- settings.py 【项目配置】【***常常修改***】
|-- asgi.py 【接收网络请求】【不要动】
|-- wsgi.py 【接收网络请求】【不要动】
3. APP
- 项目
- app,用户管理 【表结构,函数,HTML,CSS】
- app,后台管理 【表结构,函数,HTML,CSS】
- app,网站 【表结构,函数,HTML,CSS】
- app,API 【表结构,函数,HTML,CSS】
··
注意:我们开发比较简洁,用不到多app
python manege.py startapp app01
├─app01
│ │ admin.py 【固定,不动】django默认提供了admin后台管理
│ │ apps.py 【固定,不动】app启动类
│ │ models.py 【**重要**】,对数据库操作
│ │ tests.py 【固定,不动】单元测试
│ │ views.py 【**重要**】,函数
│ │ __init__.py
│ │
│ └─migrations 【固定,不动】数据库变更记录
│ __init__.py
4. 快速上手
-
确保app已注册
在settings中INSTALLED_APPS中加一行:'app01.apps.App01Config',
-
编写URL和视图函数的对应关系【urls.py】
- 编写视图函数【views.py】
-
启动Django项目
-
命令行启动
python manage.py runserver
-
pycharm启动
-
4.1 templates模板
# 去app目录下的templates目录寻找html文件(根据app注册顺序,逐一去他们的templates目录中寻找)
# 加上这个之后 'DIRS': [os.path.join(BASE_DIR, 'templates')],
# 优先去项目的根目录的templates中寻找
4.2 静态文件
在开发过程中一般将:
图片, CSS, JS 都会当作静态文件处理。
Django中推荐下面这样引入静态文件,这样如果改了路径,只需要修改配置文件就行
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.css' %}" >
</head>
<body>
<h1>添加用户</h1>
<img src="{% static 'img/1.jpg' %}" alt="" />
<script src="{% static 'js/jquery-3.7.1.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
</body>
</html>
5. 模板语法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>模板语法学习</h1>
<div>{{ n1 }}</div>
<div>{{ n2 }}</div>
<div>{{ n2.0 }}</div>
<div>{{ n2.1 }}</div>
<div>{{ n2.2 }}</div>
<div>
{% for item in n2 %}
<span>{{ item }}</span>
{% endfor %}
</div>
<div>{{ n3.name }}</div>
<hr/>
<div>
{% if n1 == '高宇轩' %}
<h1>哈哈哈啊哈</h1>
{% elif n1 == '大帅比' %}
<h1>啦啦啦啦啦</h1>
{% else %}
<h1>嘿嘿嘿嘿嘿</h1>
{% endif %}
</div>
</body>
</html>
6. 请求和响应
def something(request):
# request 是一个对象,封装了用户发送过来的所有请求相关数据
# 1. 获取请求方式 GET/POST
print(request.method)
# 2. 在URL上传递一些值 http://localhost:8000/smt/?n1=123&n2=456
print(request.GET)
# 3. 在请求体中提交数据
print(request.POST)
# 4. HttpResponse("返回内容"),内容字符串返回给浏览器
# return HttpResponse("返回内容")
# 5. 读取HTML内容+渲染(替换)
# return render(request, "something.html", {"title": "来了"})
# 6. 让浏览器重定向到其他的页面
return redirect('')
7. 数据库操作
Django开发操作数据库更简单,内部提供了ORM框架
ORM是一个翻译的过程
7.1 安装第三方模块
pip install mysqlclient
7.2 ORM
ORM可以帮我们做两件事:
- 创建、修改、删除数据库中的表(不用写SQL语句)。【无法创建数据库】
- 操作表中数据【也不用写SQL语句】
1. 自己创建数据库
2. django连接数据库
在settings.py文件中进行配置和修改
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "django", # 数据库名字
"USER": "root",
"PASSWORD": "123",
"HOST": "127.0.0.1", # 哪台机器安装了mysql
"PORT": 3306,
}
}
3. django操作表
创建表:在models.py中:
相当于
create table app01_userinfo(
id integer primary key autoincrement, # 自动生成
name varchar(32),
password varchar(64),
age int
)
执行命令:
注意:app需要提前注册
python manage.py makemigrations
python manage.py migrate
在这个过程中,本人碰到了这个报错
django.db.utils.NotSupportedError: MySQL 8.0.11 or later is required (found 5.7.31).
应该会有不少人和我一样
我们只需要找到django安装路径
D:\Code\Python\PythonLearning\Django_Learn\djangoProject_1\.venv\Lib\site-packages\django\db\backends\base
找到base.py
再找到这一行注释掉就可以了
-
插入
def orm(request): # 测试orm操作表中的数据 # models.DepartmentInfo.objects.create(title="销售部") # models.DepartmentInfo.objects.create(title="IT部") # models.DepartmentInfo.objects.create(title="运营部") UserInfo.objects.create(name="高宇轩", password="123", age=19) return HttpResponse("成功")
-
删除
# 删除 DepartmentInfo.objects.filter(id=1).delete() # filte时筛选条件 DepartmentInfo.objects.all().delete() # all时全部删除
-
获取数据
#data_list = [对象, 行, 行] QuerySet类型 data_list = DepartmentInfo.objects.all() for obj in data_list: print(obj.id, obj.name) data_list = UserInfo.objects.filter(id=1)
-
更新数据
UserInfo.objects.all().update(password='999')
UserInfo.objects.filter(name="高宇轩").update(password='999')
8. 案例:用户管理
1. 展示用户列表
-
- 获取所有用户信息
- HTML渲染
def info_list(request):
# 1. 获取数据库中所有的用户信息
# [对象, 对象, 对象]
haha_list = UserInfo.objects.all()
print(haha_list)
return render(request, "info_list.html", {"haha_list": haha_list})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<a href="/info/add/">添加</a>
<h1>用户列表</h1>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for obj in haha_list %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
<td>
<a href="/info/delete/?nid={{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
2. 添加用户
- URL
- 函数
- GET,看到页面,输入内容。
- POST,提交 -> 写入到数据库。
def info_add(request):
if request.method == "GET":
return render(request, "info_add.html")
# 获取用户提交的数据
user = request.POST.get("user")
pwd = request.POST.get("pwd")
age = request.POST.get("age")
# 添加到数据库
UserInfo.objects.create(name=user, password=pwd, age=age)
return redirect("/info/list/")
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
<h1>添加用户</h1>
<form method="post" action="/info/add/">
{% csrf_token %} <--!>一定要加上这个</--!>
<input type="text" name="user" , placeholder="用户名">
<input type="text" name="pwd" , placeholder="密码">
<input type="text" name="age" , placeholder="年龄">
<input type="submit" value="提交">
</form>
</body>
</html>
3. 删除用户
def info_delete(request):
nid = request.GET.get("nid")
UserInfo.objects.filter(id=nid).delete()
return redirect("/info/list/")
这里配合前面的用户列表,可以实现按钮删除
注意:表单提交要加上 {% csrf_token %}