使用 Flutter 和 Django REST Framework 实现 Web 应用
上一篇文章:
用django-rest-framework实现后端会怎样呢?这是一次面向初学者的讨论,和上次一样。
Django REST框架是什么?
与FastAPI类似,它是一个可以用Python实现的WebAPI框架。它以流行的Python框架Django为基础。与FastAPI相比,其主要优点和缺点如下。
优点:
– 与Django的兼容性很好。
– 由于社区庞大,很少遇到困难。
– 相比于FastAPI,已实现的功能较多,需要自己实现的部分较少。
缺点
– 初期学习成本较高。
– 实现的功能太多,难以完全掌握。
对于那些不太了解WebAPI的人来说,我建议从django-rest-framework入手。
后端实现
请参考上次的前端部分(https://qiita.com/hima2/items/aaa29cc7546d7e99f5f1),从库的安装开始。
pip install django djangorestframework
下一步是创建Django项目。项目是一组实例设置,包括数据库设置和选项设置。在这里我们将创建一个名为”mysite”的项目。
django-admin startproject mysite
创建项目后,以下文件夹将自动创建。
mysite
manage.py
mysite
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
请参阅每个.py文件的详细信息,请点击这里(https://docs.djangoproject.com/ja/4.2/intro/tutorial01/)。
首先,确保服务器已经启动。进入上面的mysite文件夹,并运行以下命令。
python manage.py runserver 8080
manage.py 在 Django 管理过程中扮演多重角色,但在这里我们是启动了服务器,也就是 “runserver”。
打开浏览器,访问 http://127.0.0.1:8080,将会跳转至以下页面。

在mysite文件夹中执行以下命令。
python manage.py startapp myapp
在这里,创建了一个名为”myapp”的应用程序模板。
然后可以看到在mysite目录下创建了一个名为myapp的文件夹。
请前往myapp下创建一个名为views.py的文件,并复制以下内容。
from rest_framework.views import APIView
from rest_framework.response import Response
class HelloWorld(APIView):
def get(self, request):
return Response({"greeting": "Hello"})
这部分是用FastAPI编写的。
@app.get("/")
def read_root():
return {"greeting": "Hello"}
请理解为和上述意思相同就可以了。
但是,相对于FastAPI,URL的设置有点复杂。
同样,打开myapp下的urls.py文件,复制并粘贴以下内容。
from django.urls import path
from .views import *
urlpatterns = [path("greeting", HelloWorld.as_view())]
接下来,您需要将mysite目录下的urls.py文件按以下方式进行修改。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [path("admin/", admin.site.urls), path("api/", include("myapp.urls"))]
如果问你在做什么,那么在 mysite/urls.py 中,我们配置了:当访问 “http://127.0.0.1:8080/api” 时,会重定向到 myapp/urls.py。
在 myapp/urls.py 中,我们配置了:当访问 “http://127.0.0.1:8080/api/greeting” 时,会调用 HelloWorld 类。
现在请准备另一个命令提示符窗口,使用 curl 命令再次访问 API。
curl http://127.0.0.1:8080/api/greeting
然后,或者于是,或则
{"greeting":"Hello"}
如未能显示,请确认网址是否输入正确,或确保已正确启动runserver的人。
确认动作
由于URL稍微有点变化,所以只需要稍微修改前端代码。
- Uri url = Uri.parse("http://127.0.0.1:8080/");
+ Uri url = Uri.parse("http://127.0.0.1:8080/api/greeting");
当你重新启动Flutter应用并点击按钮,会再次在控制台上显示。
error
实际上(或者应该说是理所当然的),在django-rest-framework中也需要进行类似的CORS设置。
CORS的配置
为了引入 CORS,需要安装一个库。
pip install django-cors-headers
请将mysite/settings.py文件编辑如下。
INSTALLED_APPS = [
...,
'corsheaders', #追加
]
MIDDLEWARE = [
...,
'corsheaders.middleware.CorsMiddleware', # 追加
]
CORS_ORIGIN_WHITELIST = [
'http://localhost:8000'
]
保存成功后,按返回按钮回到Flutter,控制台将输出
{"greeting:"Hello"}
输出为 “と”。
最后
与FastAPI相比,django-rest-framework可能会让人感到有些复杂,但正如前面所提到的,django-rest-framework也有自己的优点。
关于Django,有很多教学资源可以使用,所以请一定要认真学习。
此外,关于CORS的URL如果是http://127.0.0.1~可能无法正常工作,原因我不太清楚,如果你知道的话,请告诉我。
请提供更具体的上下文或句子,以便我能够更好地帮助您进行翻译。
Django的环境设置
Django的CORS引入