Django 基础使用
Django 官网下载页面
https://www.djangoproject.com/download/
安装方法
命令行安装
1
21. pip3 install django==1.1.23
2. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.1.23 # -i 指定哪个库Pycharm安装
1
安装不要勾选将包安装到指定的地址目录,否则需要将该地址加到环境变量才能使用django-admin命令
创建 Django 项目
命令行:
1
21. cd 要保存Django的目录
2. python django-admin startproject 项目名Pycharm 创建
1
2
31. File --> new project --> Django
2. 可以配置app名称
3. 不要勾选虚拟环境
配置 Django 项目
Django的配置文件为 project/settings.py文件,作为初学者要先记住4个需要配置的地方:
templates (存放HTML文件的配置)
1
2
3
4
5
6
7
8TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 告诉Django 我用到的html文件都去这个目录找
'DIRS': [os.path.join(BASE_DIR, 'templates'),]
# ... 列表中多个目录会依次查找
}
]静态文件:
1
2
3
4
5
6
7
8
9# 静态文件夹的别名(在HTML文件中使用)
# 静态文件保存的文件别名,会依次的查找下面的static1和static2,一直到找不到
STATIC_URL = '/static/'
# 静态文件夹的真正路径
# 所有静态文件(css/js/图片) 都放在下面配置文件目录中
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]注释掉 csrf 相关的中间件
1
2# CSRF verification failed. Request aborted. 问题需要注释:大概是:46行
# 'django.middleware.csrf.CsrfViewMiddleware'Django项目连接数据库
1
2
3
4
5
6
7
8
9
10DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
'NAME': 'mybook',
'HOST': '10.0.0.200',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456',
}
}
Django Web 请求流程
- 启动Django项目,等待用户连接
- 浏览器在地址栏输入URL,来连接我的Django项目
- 在urls.py中找到路径和函数的对应关系
- 执行对应的函数
- 返回响应
urls.py 的配置
- project/urls.py 负责保存路径和函数的对应关系
1 | from .views import index,sport,login,baobao --> 项目中的views 默认从项目使用相对路径找到 |
1 | from app01 import views |
views.py 的配置
- app/views.py 专门用来定义处理请求的函数
1 | # 必备三件套 |
1 | # request相关: |
1 | def publisher_list(request): |
ORM 的使用
- 什么是ORM
1 | 1. 是一种编程的方法论(模型),和语言无关,其他的语言也有类似的实现 |
- ORM的本质
1 | 类 --> 数据表 |
- ORM的功能
1 | ORM 操作数据表 |
- Django里的ORM使用
1 | 1. 手动创建数据库 |
1 | 2. 在settings.py 里面配置数据库的链接信息 |
1 | # 3. 在project/__init__.py 文件中 告诉Django用pymysql模块代替MySQLDB来连接 |
1 | # 4. 在app下的models.py 里面定义类 |
1 | 5. 执行两个命令: |
1 | 6. 创建成功的输出结果 |
1 | 7. 删除表 |
1 | 8. 修改表 |
刷新数据到展示页面
- 完善views中的publisher_list函数,将数据库表中刚建好的数据展示出来
1 | from app01 import models |
- 在publisher_list.html中使用模板语言刷新出数据
1 |
|
启动Django项
命令行启动:
D:\MyProject\项目路径>python manage.py runserver 8099Pycharm启动
点绿色的小三角,直接启动Django项目,选择项目名编辑可以修改端口
出版社信息 添加、删除、修改操作
添加出版社
- 首先在urls.py文件中增加函数与访问路径的对应关系
1 | urlpatterns = [ |
- 在templates路径下添加add_publisher.html页面
1 | <!--post提交指向当前页面--> |
1 | <!-- 在原有的展示页面上添加一个a标签作为入口指向add_publisher.html--> |
- 在views.py文件写 编写add_publisher函数方法
1 | # 添加出版社 |
删除出版社
- 在urls.py文件中添加对应关系
1 | urlpatterns = [ |
- 定义删除按钮
1 | <tbody> |
- 编写del_publisher函数方法
1 | # 删除出版社 |
编辑出版社
- 在urls.py文件中添加对应关系
1 | urlpatterns = [ |
- 定义编辑按钮
1 | <tbody> |
- 创建edit_publisher.html页面
1 | <!--1. id 将要编辑的数据id放在页面中,但是不显示--> |
- 编写edit_publisher函数方法
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# 编辑出版社
def edit_publisher(request):
# 如果是POST提交,将用户从编辑页面修改的数据刷新到数据库中
if request.method == "POST":
edit_id = request.POST.get("id",None)
new_name = request.POST.get("publisher_name",None)
# 更新出版社
# 根据ID取到编辑的是哪个出版社
edit_publisher_obj = models.Publisher.objects.get(id=edit_id)
edit_publisher_obj.name = new_name
# 把修改后的数据提交到数据
edit_publisher_obj.save()
# 去出版社列表页面展示,查看是否更新成功
return redirect("/publisher_list/")
# 返回编辑的是哪个出版社对象
# 从GET请求中取到要编辑的ID
# 当用户从展示页点击编辑按钮,需要获取用户点击的数据ID,然后得到数据对象传给编辑页面
edit_id = request.GET.get("id",None)
if edit_id:
publisher_obj = models.Publisher.objects.get(id=edit_id)
return render(request,"edit_publisher.html",{"publisher_obj":publisher_obj})
else:
return HttpResponse("您要编辑的数据不存在")
图书信息 添加、删除、修改
一对多关系表的建立
ORM添加外键关联 models.ForeignKey
1 | class Book(models.Model): |
展示所有书籍
在urls.py文件中添加对应关系
1
2# 书籍所有相关
url(r'^book_list/', views.book_list),在book_list.html中使用模板语言刷新出数据
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
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书籍列表</title>
</head>
<h1>书籍列表</h1>
<a href="/add_book/">添加书籍</a>
<body>
<table border="1">
<thead>
<tr>
<th>序号</th>
<th>ID</th>
<th>书名</th>
<th>出版社</th>
</tr>
</thead>
<tbody>
{% for book in book_list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ book.id }}</td>
<td>{{ book.title }}</td>
<td>{{ book.publisher.name }}</td>
</tr>
{% endfor %}
{#book.publisher 得到的是出版社对象,继续.出属性#}
{#book --> 书对象#}
{#book.publisher --> book对应的出版社对象#}
{#book.publisher_id --> 数据库表中实际保存的外键值#}
{#book.publisher.name --> book对应的出版社对象的属性#}
</tbody>
</table>
</body>
</html>views.py文件中添加展示书籍函数 book_list
1 | def book_list(request): |
添加书籍
- 在urls.py文件中添加对应关系
1 | # 书籍所有相关 |
- 别忘记添加入口
1 | <a href="/add_book/">添加书籍</a> |
- 编写add_book函数
1 | # 添加书籍 |
- 添加add_book.html页面
1 |
|
删除书籍
在urls.py文件中添加对应关系
1
2
3
4# 书籍所有相关
url(r'^book_list/', views.book_list),
url(r'^add_book/', views.add_book),
url(r'^del_book/', views.del_book),定义删除按钮
1 | <tbody> |
- 编写del_book方法
1 | def del_book(request): |
编辑书籍
在urls.py文件中添加对应关系
1
2
3
4
5# 书籍所有相关
url(r'^book_list/', views.book_list),
url(r'^add_book/', views.add_book),
url(r'^del_book/', views.del_book),
url(r'^edit_book/', views.edit_book)编写edit_book方法
1 | def edit_book(request): |
- 编写edit_book.html页面
1 |
|
作者信息 添加、删除、修改
多对多关系表的建立
ORM添加多对多的关联关系 models.ManyToManyField
1 | class Author(models.Model): |
urls.py预先定义所有方法函数和路径的对应关系
1 | # 作者所有相关 |
展示所有作者
- author_list函数
1 | def author_list(request): |
- 展示作者页面 author_list.html
1 |
|
添加作者
- add_author函数
1 | * 要将所有书籍传给添加页面的select |
1 | # 添加作者 |
- 添加add_author.html页面
1 |
|
删除作者
- del_author函数:
1 | # 删除作者 |
编辑作者
- edit_author函数
1 | 1. 注意获取页面上的select或者checkbox多个值需要使用getlist接收 |
1 | def edit_author(request): |
- 添加edit_author.html页面
1 |
|
使用 Bootstrap模板 和 Font Awesome图标字体库
去Bootstrap下载想要的模板
- 选择控制台模板https://v3.bootcss.com/examples/dashboard/
- 右键另存为桌面,会下载两个文件:
Dashboard Template for Bootstrap_files 目录:只保留dashboard.css即可
Dashboard Template for Bootstrap.html html文件
去Font Awesome官网下载图标字体库和CSS框架
将下载好的文件放入static目录
套用首页模板
- 修改publisher_list 为old_publisher_list
- 修改Dashboard Template for Bootstrap.html 为publisher_list
- 替换首页的css引入:
1 |
|
- 替换首页的jQuery引入:
1 | <script src="/static/jquery-3.3.1.js"></script> |
- Bootstrap和fontawesome的使用
1 | <div class="container-fluid"> |
- 简单的写一个add_book.html
1 |
|
- 简单的写一个edit_book.html
1 |
|