尝试使用Django进行API练习①
请注意:作者是初学者,可能有错误,请注意。
我在上一次的项目中提到了想要做点什么,因此打算顺便学习一下API,毕竟之前没接触过。
我想使用Weather Hacks的天气API来制作一个天气显示页面。(写代码的时候可能会有些凌乱,请谅解)
另外,由于上次开始后一直在持续进行,项目的创建方式和进入虚拟环境的方法请参考之前的说明。
这一次我真的想要体验一下kite的强大之处。
制作应用程序
据说在django中,每个功能都需要创建一个应用程序。那么就让我们开始创建吧!
python manage.py startapp アプリ名
在这里,您可以创建一个名为“应用名称”的应用程序。这次让我们称之为weather_app。
然后,Weather_app文件夹应该创建在django_test文件夹中。
现在,让我们来看一下目录结构。
项目名称/
┗django_test/
┣django_test/
┃ ┣_init_.py
┃ ┣settings.py
┃ ┣urls.py
┃ ┗wsgi.py
┣weather_app/
┃ ┣migrations/
┃ ┃ ┗_init_.py
┃ ┣_init_.py
┃ ┣admin.py
┃ ┣apps.py
┃ ┣models.py
┃ ┣test.py
┃ ┗views.py
┣db.sqlite3
┗manage.py项目名/
┗django_test/
┣django_test/
┃ ┣_init_.py
┃ ┣settings.py
┃ ┣urls.py
┃ ┗wsgi.py
┣weather_app/
┃ ┣migrations/
┃ ┃ ┗_init_.py
┃ ┣_init_.py
┃ ┣admin.py
┃ ┣apps.py
┃ ┣models.py
┃ ┣test.py
┃ ┗views.py
┣db.sqlite3
┗manage.py
我认为会是这样的。在涉及到各个项目的时候会进行解释。由于项目名/django_test和django_test/django_test很难区分,所以在本文中,我将前者表示为django_test/,后者表示为../django_test/。虽然有些晦涩难懂,但过长的说明也不好,还请见谅。
添加已创建的应用程序
即使继续执行,该项目也没有意识到已添加了应用程序。让我们编辑django_test/settings.py并告诉它我们已经添加了一个应用程序!
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'weather_app', # 追加
]
创建模板
在Django中,为每个应用程序创建一个模板文件夹,并将HTML文件放置在其中。
通过从每个应用程序调用HTML并传递数据进行显示。
现在,请在weather_app文件夹内创建一个名为”templates”的文件夹。然后在创建的”templates”文件夹中创建一个”weather_app”文件夹。在其中创建HTML文件。本次创建base.html。文件结构如下所示。
天气应用/
┗模板/
┗天气应用/
┗base.html
由于我使用PyCharm,所以当我创建HTML文件时,它会帮我创建模板,但是我还不需要写内容。
创建视图
在View中,我们可以将数据传递给模板并进行显示。(这是我认为的。)
据说有函数视图和类视图两种写法,但这次我打算挑战平时不常用的类视图。
打开weather_app/views.py文件,开始写入。
from django.shortcuts import render
from django.views.generic import TemplateView
# Create your views here.
class weather_view(TemplateView):
template_name = 'weather_app/base.html'
只要调用此weather_view类,就会显示weather_app/base.html。
生成URL
那么,我们来设置URL来调用。在weather_app文件夹下创建urls.py文件吧。
from django.urls import path
from weather_app.views import weather_view
urlpatterns = [
path('', weather_view.as_view(), name='weather_view'),
]
我们去向项目组请求他们使用我在这里写的URL。位置在../django_test/urls.py。
from django.contrib import admin
from django.urls import path, include # includeを追加
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('weather_app.urls')), # 追加
]
如果运行这个,应该会执行base.html。 让我们运行一下并跳转到URL上吧!
看看,是不是显示了一个完全白色的页面。 这样就完成了页面的显示!
将数据从视图传递到模板
下一步,让我们将数据传递给模板。
这次,让我们随便传递一个名为“test”的字符串并进行显示。
...
class weather_view(TemplateView):
template_name = 'weather_app/base.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["text"] = "test"
return context
哦,来到这里后我才了解到Kite的厉害之处。能够在瞬间写出方法确实非常轻松方便。
好了,既然应该已经传递了数据,那么我们就开始修改模板来显示吧。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{text}}<br/>
</body>
</html>
然后显示出了刚刚传递的test字符串!
哎呀,Kite和HTML不支持呢…希望能够支持(迫切)
这次指定的名称是text,所以{{text}}已被使用,但是例如
...
context["baba"] = "このみ"
context["まつり"] = "姫"
context["モモセ"] = "リオ"
context["天空橋"] = "tomoka"
return context
如果这样的话
...
{{baba}}<br/>
{{maturi}}<br/>
{{ももせ}}<br/>
{{天空橋}}<br/>
就像这样。可以使用汉字或平假名。
总结
因为变得太长了,所以我打算在这里先结束。
Kite很厉害呢。不仅速度快,还能在建议中突出显示当前正在写的参数,非常容易理解。
我觉得建议上面出现我想要的是偶然还是Kite的厉害呢…总之很好用。
不过,如果能在HTML上也有就更好了,我对HTML不太了解…
希望下次能学习简单的Json格式和从API接收数据之类的。
那就先这样吧。