本文使用FastAPI重构了Django官网的Polls API,能让你对FastAPI的使用过程有个初步了解。 原文链接:https://www.agiliq.com/blog/2020/05/polls-api-using-fastapi/ 原作:Manjunath Hugar 翻译:大江狗 什么是FastAPI 的另一个优点是它提供了一个交互式 API 文档,只需访问http://127.0.0.1:8000/docs或http://127.0.0.1:8000/redoc 正式开始 现在,让我们继续重建我们的民意调查(Polls
在你刚刚创建的static目录中,创建另外一个目录polls并在它下面创建一个文件style.css。换句话讲,你的样式表应该位于polls/static/polls/style.css。 将下面的代码放入样式表中 (polls/static/polls/style.css): polls/static/polls/style.css li a { color: green; } 下一步,在polls/templates/polls/index.html的顶端添加如下内容 : polls/templates/polls/index.html {% load staticfiles 换句话,将你的图片放在 polls/static/polls/images/background.gif。 然后,向你的样式表添加(polls/static/polls/style.css): polls/static/polls/style.css body { background: white
在你刚刚创建的static目录中,再创建一个polls目录并在它下面创建一个文件style.css。这样你的style.css样式表应该在polls/static/polls/style.css。 静态文件命名空间: 和模板类似,其实我们也可以直接将静态文件直接放在polls/static下面(而不是再创建一个polls子目录),但是这样是一个不好的行为。 样式表中写入这些内容(polls/static/polls/style.css): /*polls/static/polls/style.css*/ li a { color: green; 在polls/static/polls/目录中创建一个images子目录。在这个目录中,放入一张图片background.gif。 换句话,将你的图片放在polls/static/polls/images/background.gif。
[ # ex: /polls/ path("", views.index, name="index"), # ex: /polls/5/ path("<int:question_id 再试试 /polls/34/results/和 /polls/34/vote/——你将会看到暂时用于占位的结果和投票页。 当Django找到了匹配的模式polls/,Django会分离匹配的文字polls/并发送剩余的文字34/到polls.urls进一步处理。 换句话说,你的模板文件的路径应该是polls/templates/polls/index.html。 模板命名空间 虽然我们现在可以将模板文件直接放在 polls/templates 文件夹中(而不是再建立一个 polls 子文件夹),但是这样做不太好。
对于一个像polls这样的小应用,这个过程不是太难。 首先,在你的Django项目之外,为polls创建一个父目录。称这个目录为django-polls。 将polls 目录移动到django-polls目录。 创建一个包含一些内容的文件django-polls/README.rst: django-polls/README.rst ===== Polls ===== Polls is a simple Django 'polls', ) 2. Include the polls URLconf in your project urls.py like this:: url(r'^polls/', include('polls.urls
现在在polls下面新建 urls.py from django.conf.urls import patterns,url from polls import views urlpatterns = patterns('', #ex:/polls/ url(r'^$',views.index,name='index'), #ex:/polls/5/ url(r'^ /', include('polls.urls',namespace="polls")), url(r'^admin/', include(admin.site.urls)), ) #有Example #修改模板文件 dizzy@dizzy-pc:~/Python/mysite$ vim polls/templates/polls/detail.html #需要加入form表单
构建一个简单的表单提交页 polls/templates/polls/detail.html
{{ error_message }}
{% endif %} <form action="{%url '<em>polls</em>:vote' question.id :vote' question.id %}, 即表示访问<em>polls</em>/views.py的vote方法,并携带问题id作为参数。 ='vote'), 投票页面截图 http://127.0.0.1:8000/<em>polls</em>/1/ : ? </a> 提交结果页面 http://127.0.0.1:8000/<em>polls</em>/1/results/ ?因为轮询是在它们自己的 URLconf (polls/urls.py)中,它们可以被放在“/polls/”下,或“/fun_polls/”下,或“/content/polls/”下,或任何其他路径根目录下 通过添加以下 path()调用的 polls.urls 模块(polls/urls.py): polls/urls.py¶ from django.urls import path from . import 尝试“/polls/34/results/”和 /polls/34/vote/——这些将显示占位符结果和投票页面。 在“ polls/”找到匹配项后,它将剥离匹配的文本(“ polls /”),并将剩余的文本“ 34/”发送到“ polls.urls” URLconf,以进行进一步处理。 换句话说,您的模板应该在 polls/templates/polls/index.html 中。
创建项目的子模块应用 上一节内容中,我们创建了一个django项目mysite/,在项目的骨架的基础上,我们再创建基于项目的一个子模块投票模块,模块名称暂时定义为polls 进入项目目录,执行如下命令, 在mysite/项目基础上创建一个模块应用polls python3 manage.py startapp polls 上述命令执行完成之后,会在我们的项目文件夹中,自动生成一个polls应用模块文件夹 视图创建完成后,我们要将视图和对应的URL地址进行关联,项目中的url地址映射的主要配置文件是urls.py,在polls模块中创建urls.py配置文件,并修改polls/urls.py文件内容如下: :8000/polls 2.项目接收到用户请求,url地址->polls/ 3.进入项目的映射文件urls.py中进行正则匹配:url(r"^polls", include("polls/urls" )),开始打开通过include包含的polls.urls子模块映射文件polls/urls.py 4.进入项目子模块polls的映射文件中进行匹配,由于polls/路径已经匹配通过,开始匹配polls
一、创建一个VotingSystem项目以及polls应用 $ django-admin.py startproject VotingSystem $ cd VotingSystem $ python3 manage.py startapp polls 注:如果使用Pycharm来创建的话,以上两步都可以省略 二、配置tempaltes路径(如果没有) a. 'polls', ] 注:以上两步如果用Pycharm都可以一步到位 四、编辑polls/model.py,创建数据库模型 from django.db import models # 问题 class /', include("polls.urls", namespace="polls")), ] 十、编辑polls/urls.py from django.conf.urls import url from 目录,在polls目录下创建index.html detail.html results.html三个HTML文件 index.html: <!
通过CD命令进入项目路径: cd D:\mysite 进入文件目录以后,键入以下命令: python manage.py startapp polls 执行成功以后,将创建一个目录polls: polls 要在polls目录中创建URLconf,请创建一个名为的文件urls.py。 创建成功以后polls目录现在应该如下所示: polls/ __init__.py admin.py apps.py migrations/ __init__.py 因为投票应用有它自己的 URLconf( polls/urls.py ),他们能够被放在 “/polls/“ , “/fun_polls/“ ,”/content/polls/“,或者其他任何路径下,这个应用都能够正常工作 You’re at the polls index.这是你在 index 视图中定义的。实现了以上功能,就是最基础的应用视图开发。
polls 运行后生成polls文件: mysite/ polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py ", "votes", "id" FROM "polls_choice__old"; DROP TABLE "polls_choice__old"; CREATE INDEX "polls_choice 在刚创建的templates目录下创建另一个polls目录,并在该目录下新建index.html文件。换句话说,template应该在polls/templates/polls/index.html。 /results.html', {'question': question}) 创建polls/results.html模板 polls/templates/polls/results.html <h1 使用polls/style.css引用资源 编辑style.css polls/static/polls/style.css li a { color: green; } 修改polls/templates
访问“/polls/34/results/”和“/polls/34/vote/”,将分别显示预定义的伪结果和投票页面。 当它匹配到了^polls/,就剥离出url中匹配的文本polls/,然后将剩下的文本“34/”,传递给“polls.urls”进行下一步的处理。在polls.urls,又匹配到了r’^(? 换句话说,你的模板应该是polls/templates/polls/index.html。 我们将在以后讨论你可以在polls/detail.html模板文件里放些什么代码,但如果你想快点运行上面的例子,仅仅只需要: # polls/templates/polls/detail.html { polls/index.html改为具有命名空间的详细视图: # polls/templates/polls/index.html
Archlinux上安装MySQL/MariaDB和其它发行版略有不同,因此这里梳理记录一下 执行常规安装 [mu@mu polls]$ sudo pacman -S mariadb #安装MariaDB [mu@mu polls]$ sudo systemctl start mariadb #启动MariaDB,会发现启动失败 Job for mariadb.service failed because [mu@mu polls]$ sudo journalctl -xe | grep error #抓取错误信息 ? [mu@mu polls]$ id mysql uid=978(mysql) gid=978(mysql) groups=978(mysql) [mu@mu polls]$ sudo mysql_install_db ]$ mysql_secure_installation [mu@mu polls]$ sudo systemctl enable mariadb [mu@mu polls]$ sudo systemctl
我们将 form 的 action 设置为 {% url ‘polls:vote’ poll.id %},以及设置了method=”post” 。 在 教程 第3部分 中,我们为 polls 应用创建了一个 URLconf 配置中包含有这一行代码: url(r'^(? 现在,在浏览器中访问 /polls/1/ 并完成投票。每次投票后你将会看到结果页数据都有更新。 如果你没有选择投票选项就提交了,将会看到错误的信息。 index() 用于显示 polls 列表的 index() 视图 (也在教程 第3部分中),也是存在类似的问题。 现在你可以在 polls/views.py 中删除 index() , detail() 和 results() 视图了。 我们不需要它们了 – 它们已替换为通用视图了。
在mysite/项目基础上创建一个模块应用polls python3 manage.py startapp polls 上述命令执行完成之后,会在我们的项目文件夹中,自动生成一个polls应用模块文件夹 视图创建完成后,我们要将视图和对应的URL地址进行关联,项目中的url地址映射的主要配置文件是urls.py,在polls模块中创建urls.py配置文件,并修改polls/urls.py文件内容如下: 请求流程图 1.客户端发起请求:http://localhost:8000/polls 2.项目接收到用户请求,url地址-> polls/ 3.进入项目的映射文件urls.py中进行正则匹配 :url(r"^polls", include("polls/urls")),开始打开通过include包含的polls.urls子模块映射文件polls/urls.py 4.进入项目子模块polls 的映射文件中进行匹配,由于polls/路径已经匹配通过,开始匹配polls/后面的路径-> 路径为:""; 进入polls/urls.py中查找对应的路径->url(r"^$", view.index
path.png 此处配置了URL的过滤 第一行是:将匹配到 polls/ 路径下的 的所有请求使用 polls.urls.py 文件中的过滤方法进行过滤 第二行是默认的执行过滤 urlpatterns = [ url(r'^polls/', include('polls.urls')), url(r'^admin/', include(admin.site.urls)) ] 正则 针对 URL /polls/test/ 说明匹配 jango发现匹配到了正则表达式'^polls/' 然后,Django将去掉匹配到的文本("polls/")并将剩下的文本 —— "test/" —— 发送给 P<question_id>) 定义了一个名字,它将用于标识匹配的模式 [0-9]是标识至少存在一个数字 模板 将模板放置在 templates 的 polls 目录下面。 因为 通过 polls 相当于是创建了命名空间 在 views.py 中,不同的 path 返回不同的模板 views.py 文件就是一个中间者 mvc 中的 c。模板就是 v。
', # ... ] 生成迁移 $ python manage.py makemigrations polls Migrations for 'polls': polls/migrations " RENAME TO "polls_choice__old"; CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT ") SELECT "id", "choice_text", "votes", NULL FROM "polls_choice__old"; DROP TABLE "polls_choice__old" ; CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id"); COMMIT; 以上的sql Applying polls.0001_initial...
一个简单表单 更新一下在上一个教程中编写的投票详细页面的模板polls/detail.html,让它包含一个HTML<form> 元素: # polls/templates/polls/detail.html 将下面的代码添加到polls/views.py: # polls/views.py from django.shortcuts import get_object_or_404, render from 在本例中,使用在Part3中设定的URLconf,reverse()调用将返回一个这样的字符串:'/polls/3/results/'。 下面创建一个polls/results.html模板: # polls/templates/polls/results.html
1 自定义 应用 的界面样式 首先,在你的 polls 目录下创建一个名为 static 的目录。 静态文件命名空间:虽然我们 可以 像管理模板文件一样,把 static 文件直接放入 polls/static ——而不是创建另一个名为 polls 的子文件夹,不过这实际上是一个很蠢的做法。 1.1 准备样式表 将以下代码放入样式表(polls/static/polls/style.css): li a { color: green; } 1.2 界面载入样式 下一步,在 polls 在 polls/static/polls 目录下创建一个名为 images 的子目录。在这个目录中,放一张名为 background.gif 的图片。 随后,在你的样式表(polls/static/polls/style.css)中添加: body { background: white url("images/background.gif")