教程来自菜鸟:https://www.runoob.com/django/django-first-app.html
一、第一个项目
1.创建项目
使用 django-admin 来创建 HelloWorld 项目:
1 | django-admin startproject backend |
创建完成后我们可以查看下项目的目录结构:
1 | (base) test@ubuntu:~/Desktop/new_project/backend$ tree |
目录说明:
- HelloWorld: 项目的容器。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
- HelloWorld/settings.py: 该 Django 项目的设置/配置。
- HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站”目录”。
- HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
接下来我们进入 HelloWorld 目录输入以下命令,启动服务器:
1 | python3 manage.py runserver 0.0.0.0:8000 |
2.视图和 URL 配置
在先前创建的 HelloWorld 目录下的 HelloWorld 目录新建一个 views.py 文件,并输入代码:
views.py
1 | from django.http import HttpResponse |
接着,绑定 URL 与视图函数。打开 urls.py 文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:
urls.py
1 | from django.urls import path |
完成后,启动 Django 开发服务器,并在浏览器访问打开浏览器并访问:
也可以修改以下规则
urls.py
1 | from django.urls import path |
注意:项目中如果代码有改动,服务器会自动监测代码的改动并自动重新载入,所以如果你已经启动了服务器则不需手动重启。
3.path()函数
Django path() 可以接收四个参数,分别是两个必选参数:route、view 和两个可选参数:kwargs、name。
语法格式:
1 | path(route, view, kwargs=None, name=None) |
- route: 字符串,定义 URL 的路径部分。可以包含变量,例如
<int:my_variable>
,以从 URL 中捕获参数并将其传递给视图函数。 - view: 视图函数,处理与给定路由匹配的请求。可以是一个函数或一个基于类的视图。
- kwargs(可选): 一个字典,包含传递给视图函数的额外关键字参数。
- name(可选): 为 URL 路由指定一个唯一的名称,以便在代码的其他地方引用它。这对于在模板中生成 URL 或在代码中进行重定向等操作非常有用。
二、Django模版
在上一章节中我们使用 django.http.HttpResponse() 来输出 “Hello World!”。该方式将数据与视图混合在一起,不符合 Django 的 MVC 思想。
本章节我们将为大家详细介绍 Django 模板的应用,模板是一个文本,用于分离文档的表现形式和内容。
1.模版应用
我饿们创建templates,建立test.html
1 | . |
test.html
1 | <h1>{{ hello }}</h1> |
从模板中我们知道变量使用了双括号。
接下来我们需要向Django说明模板文件的路径,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 为 **[os.path.join(BASE_DIR, ‘templates’)]**,如下所示:
settings.py
1 | ... |
我们现在修改 views.py,增加一个新的对象,用于向模板提交数据:
1 | from django.shortcuts import render |
1 | from django.urls import path |
可以看到,我们这里使用 render 来替代之前使用的 HttpResponse。render 还使用了一个字典 context 作为参数。
context 字典中元素的键值 hello 对应了模板中的变量 ****。
再次访问 http://127.0.0.1:8000/test,可以看到页面:
(因为我的Django部署在虚拟机上,我在主机上进行访问,所以地址是我虚拟机的地址192.168.43.19)
这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。
接下来我们将具体介绍模板中常用的语法规则。
2Django模板标签
a变量
模板语法:
1 | view:{"HTML变量名" : "views变量名"} |
views.py
1 | from django.shortcuts import render |
test.html
1 | <!DOCTYPE html> |
b列表
templates 中的 runoob.html中,可以用 . 索引下标取出对应的元素。
views.pyt
1 | from django.shortcuts import render |
c字典
templates 中的 runoob.html中,可以用 .键 取出对应的值。
1 | from django.shortcuts import render |
1 | <p>{{ views_dict }}</p> |
d 过滤器
模板语法:
1 | {{ 变量名 | 过滤器:可选参数 }} |
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:
1 | {{ name|lower }} |
过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
1 | {{ my_list|first|upper }} |
以上实例将第一个元素并将其转化为大写。
有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:
1 | {{ bio|truncatewords:"30" }} |
这个将显示变量 bio 的前30个词。
其他过滤器:
- addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
- date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,实例:
1 | {{ pub_date|date:"F j, Y" }} |
• length : 返回变量的长度。
e safe
将字符串标记为安全,不需要转义。
要保证 views.py 传过来的数据绝对安全,才能用 safe。
和后端 views.py 的 mark_safe 效果相同。
Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效。加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。
1 | from django.shortcuts import render |
三、Django模型
Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。
MySQL 是 Web 应用中最常用的数据库。本章节我们将以 Mysql 作为实例进行介绍。
如果你没安装 mysql 驱动,可以执行以下命令安装:
1 | sudo pip3 install pymysql |
1. Django ORM
Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
使用 ORM 的好处:
- 提高开发效率。
- 不同数据库可以平滑切换。
使用 ORM 的缺点:
- ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
- 长期写 ORM 代码,会降低编写 SQL 语句的能力。
ORM 解析过程:
- 1、ORM 会将 Python 代码转成为 SQL 语句。
- 2、SQL 语句通过 pymysql 传送到数据库服务端。
- 3、在数据库中执行 SQL 语句并将结果返回。
2 数据库配置
Django 如何使用 mysql 数据库
创建 MySQL 数据库( ORM 无法操作到数据库级别,只能操作到数据表)语法:
1 | create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8 |
例如我们创建一个名为 Sn0wm1an数据库,编码指定为 utf8:
1 | create database Sn0wm1an default charset=utf8; |
在setting里配置DATABASES
1 | DATABASES = { |
接下来,告诉 Django 使用 pymysql 模块连接 mysql 数据库:
1 | # 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置 |
3 定义模型
a 创建APP
Django 规定,如果要使用模型,必须要创建一个 app。我们使用以下命令创建一个 TestModel 的 app:
1 | django-admin startapp TestModel |
目录如下
1 | . |
修改 TestModel/models.py 文件,代码如下:
以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
接下来在 settings.py 中找到INSTALLED_APPS这一项,如下:
1 | INSTALLED_APPS = ( |
在命令行中运行:
1 | python manage.py migrate # 创建表结构 |
b 数据库操作
接下来我们在 HelloWorld 目录中添加 testdb.py 文件(下面介绍),并修改 urls.py:
urls.py
1 | from django.urls import path |
c 获取数据
Django提供了多种方式来获取数据库的内容,如下代码所示:
testdb.py
1 | # -*- coding: utf-8 -*- |
d 更新数据
修改数据可以使用 save() 或 update():
1 | # -*- coding: utf-8 -*- |
c 删除数据
删除数据库中的对象只需调用该对象的delete()方法即可:
1 | # -*- coding: utf-8 -*- |