Thứ năm, 12/12/2019 | 00:00 GMT+7

Cách tạo ứng dụng thời tiết ở Django

Trong bài viết này, ta sẽ xây dựng một ứng dụng Django đơn giản hiển thị thời tiết hiện tại cho các city khác nhau. Để nhận dữ liệu thời tiết hiện tại, ta sẽ sử dụng API Bản đồ thời tiết mở .

Ta sẽ làm việc với database và tạo biểu mẫu, vì vậy các khái niệm được sử dụng ở đây có thể áp dụng cho các dự án phức tạp hơn.

Mã trong bài viết này được viết bằng Python 3 và Django 2.0, vì vậy để làm theo hướng dẫn này, bạn sẽ phần nào làm quen với cả hai.

Đây là ứng dụng của ta sẽ trông như thế nào khi ta hoàn tất.

Trang chủ ứng dụng thời tiết, với thời tiết London, Tokyo, Las Vegas và Miami

Tất cả mã cho bài viết này đều có trên GitHub .

Cài đặt

Cài đặt Django giống như cài đặt bất kỳ thư viện Python nào khác: bạn có thể khởi động một môi trường ảo và chạy pip để cài đặt Django hoặc bạn có thể làm những gì tôi làm và tạo một folder dự án, chạy pipenv và sau đó kích hoạt shell pipenv . Cả hai phương pháp đều hoạt động, nhưng đối với bài viết này, tôi sẽ sử dụng pipenv .

  • pipenv install django

Thao tác này sẽ cài đặt version Django mới nhất cho bạn. Tại thời điểm viết bài này, Django đang ở version 2.0.4.

Khi bạn đã cài đặt xong Django, hãy tạo và chuyển đến một folder cho dự án này nếu bạn chưa cài đặt. Khi đó, bạn có thể chạy lệnh startproject mà Django cung cấp cho bạn để tạo dự án.

  • django-admin startproject the_weather

Django lẽ ra phải tạo một vài file mới trong folder của bạn.

Hãy thử khởi động server phát triển của ta . Để làm điều đó, hãy chuyển đến folder mới và sử dụng manage.py để chạy lệnh runserver trong terminal của bạn:

  • cd the_weather
  • python manage.py runserver

Nếu bạn nhìn vào terminal của bạn , bạn sẽ thấy URL cho ứng dụng của bạn . Theo mặc định, nó phải là 127.0.0.1:8000 .

 server  phát triển đang hoạt động

Mở trình duyệt của bạn và truy cập URL đó.

Trang chúc mừng  server  phát triển Django trong trình duyệt

Nếu bạn thấy điều đó, bạn biết bạn đã cài đặt Django chính xác. Bạn chắc chắn sẽ thấy nó vì ta thậm chí chưa thử sửa đổi mã.

Control panel dành cho administrator

Tiếp theo, ta muốn xem xét console quản trị mà Django cung cấp cho ta . Để làm điều đó, trước tiên ta phải di chuyển database của bạn , nghĩa là Django sẽ tạo các bảng được định nghĩa cần thiết cho các ứng dụng mặc định. Để thực hiện việc này, hãy chạy lệnh migrate . Dừng server bằng cách sử dụng CTRL+C và sau đó chạy:

  • python manage.py migrate

Bằng cách chạy lệnh đó, Django đã tạo database SQLite cho bạn, database mặc định trong cài đặt và nó đã thêm một số bảng vào database đó. Bạn sẽ biết liệu database đã được tạo hay chưa nếu bạn thấy một db mới. file sqlite3 trong folder dự án của bạn.

Một trong những bảng mà Django cung cấp cho ta là bảng user , bảng này sẽ được sử dụng để lưu trữ mọi user trong ứng dụng của ta . Ứng dụng ta đang xây dựng không cần mọi user , nhưng có admin-user viên sẽ cho phép ta truy cập trang tổng quan quản trị.

Để tạo admin-user , ta sẽ chạy lệnh createuperuser.

  • python manage.py createsuperuser

Làm theo hướng dẫn bằng cách cung cấp tên user , địa chỉ email và password cho admin-user của bạn. Sau khi thực hiện xong, bạn cần khởi động lại server và chuyển đến trang tổng quan quản trị.

  • python manage.py runserver

Sau đó, truy cập 127.0.0.1:8000/admin .

Lý do tại sao ta có thể truy cập trang này là bởi vì administrator được cài đặt trong urls.py của ta (lý do tại sao ta có thể thấy trang chúc mừng là vì Django cung cấp cho bạn điều đó cho đến khi bạn thêm các URL của riêng mình).

Nếu bạn đăng nhập bằng tên user và password vừa tạo, bạn sẽ thấy Trang tổng quan quản trị Django.

 Control panel  dành cho  administrator

Group và user đại diện cho hai mô hình mà Django cấp cho ta quyền truy cập. Mô hình chỉ là biểu diễn mã của các bảng trong database . Mặc dù Django đã tạo nhiều bảng hơn, nhưng không cần phải truy cập trực tiếp vào phần còn lại của chúng, vì vậy không có mô hình nào được tạo.

Nếu bạn nhấp vào 'user' bạn sẽ thấy chi tiết hơn về bảng user và bạn sẽ thấy user bạn đã tạo. Bạn nên khám phá bằng cách nhấp vào các liên kết khác nhau trong trang tổng quan để xem những gì ở đó. Chỉ cần lưu ý không xóa user của bạn, nếu không bạn sẽ phải chạy lại createsuperuser .

Hãy rời khỏi console quản trị ngay bây giờ và đi đến mã. Ta cần tạo một ứng dụng bên trong dự án của bạn cho ứng dụng thời tiết của ta .

Tạo ứng dụng

Trong Django, bạn có thể tách chức năng trong dự án của bạn bằng cách sử dụng các ứng dụng. Tôi nghĩ rằng ứng dụng là một cái tên khó hiểu vì ta thường gọi một ứng dụng là toàn bộ dự án, nhưng trong trường hợp của Django, ứng dụng đề cập đến một phần chức năng cụ thể trong dự án của bạn. Ví dụ: nếu bạn nhìn vào file settings.py, bạn sẽ thấy danh sách INSTALLED_APPS.

Ứng dụng đầu tiên trong số các ứng dụng đã cài đặt, django.contrib.admin là những gì ta vừa sử dụng. Nó xử lý tất cả các chức năng quản trị và không có gì khác. Một ứng dụng khác trong dự án của ta theo mặc định là những thứ như auth, cho phép ta đăng nhập vào console quản trị của bạn .

Trong trường hợp của ta , ta cần tạo một ứng dụng mới để xử lý mọi thứ liên quan đến việc hiển thị thời tiết. Để tạo ứng dụng đó, hãy dừng server bằng CTRL+C và chạy:

  • python manage.py startapp weather

Bằng cách chạy startapp , Django đã thêm một folder mới và nhiều file hơn vào dự án của ta .

Với các file mới nhất được tạo, hãy tạo một file mới có tên urls.py trong folder ứng dụng của ta .

urls.py
from django.urls import path  urlpatterns = [ ] 

Tệp này tương tự như urls.py trong folder the_weather của ta . Sự khác biệt là file urls.py này chứa tất cả các URL có liên quan đến chính ứng dụng.

Ta chưa chỉ định URL, nhưng ta có thể cài đặt dự án để nhận ra ứng dụng của ta và định tuyến bất kỳ URL nào cụ thể cho ứng dụng của ta đến file urls.py ứng dụng.

Đầu tiên, hãy chuyển đến danh sách INSTALLED_APPS và thêm ứng dụng này vào danh sách.

the_weather / the_weather / settings.py
...  INSTALLED_APPS = [     'django.contrib.admin',     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.messages',     'django.contrib.staticfiles',     'weather', ]  ... 

Điều này cho phép Django biết ta muốn sử dụng ứng dụng thời tiết trong dự án của bạn . Bằng cách này, Django sẽ biết nơi cần tìm các di chuyển và URL.

Tiếp theo, ta cần sửa đổi urls.py ban đầu để trỏ đến file urls.py ứng dụng của ta . Để làm điều đó, ta thêm một dòng dưới đường dẫn hiện có cho trang tổng quan quản trị. Ta cũng cần nhập include để ta có thể trỏ đến file urls.py ứng dụng của bạn .

the_weather / the_weather / urls.py
 from django.contrib import admin from django.urls import path, include  urlpatterns = [     path('admin/', admin.site.urls),     path('', include('weather.urls')), ] 

Chuỗi trống nghĩa là ta sẽ không sử dụng điểm cuối cho điểm vào ứng dụng của bạn . Thay vào đó, ta sẽ để ứng dụng xử lý bất kỳ điểm cuối cụ thể nào. Ta có thể đặt thông tin như đường dẫn ('weather /',…), điều này nghĩa là ta sẽ phải nhập 127.0.0.1:8000/weather/ để nhận được bất kỳ thứ gì liên quan đến ứng dụng thời tiết của ta . Nhưng vì dự án của ta đơn giản, ta sẽ không làm điều đó ở đây.

Thêm Mẫu và Chế độ xem

Bây giờ, điều thú vị đầu tiên ta sẽ làm. Ta cần thêm mẫu vào dự án của bạn .

Mẫu trong Django chỉ là một file HTML cho phép bổ sung cú pháp làm cho mẫu trở nên động. Ta sẽ có thể làm những việc như biến thêm, if báo cáo, và vòng, trong số những thứ khác.

Ta có một file HTML, nhưng điều này sẽ đủ để ta bắt đầu.

Ta sẽ tạo một folder mẫu để đưa file này vào.

  • cd weather
  • mkdir templates && cd templates
  • mkdir weather

Ta cũng đã tạo một folder khác có cùng tên với ứng dụng của ta . Ta đã làm điều này vì Django kết hợp tất cả các folder mẫu từ các ứng dụng khác nhau mà ta có. Để ngăn tên file bị trùng lặp, ta có thể sử dụng tên ứng dụng của bạn để ngăn trùng lặp.

Bên trong folder thời tiết, hãy tạo một file mới có tên là index.html . Đây sẽ là mẫu chính của ta . Đây là HTML ta sẽ sử dụng cho mẫu:

the_weather / weather / templates / weather / index.html
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>What's the weather like?</title>     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.2/css/bulma.css" /> </head> <body>     <section class="hero is-primary">         <div class="hero-body">             <div class="container">                 <h1 class="title">                     What's the weather like?                 </h1>             </div>         </div>     </section>     <section class="section">         <div class="container">             <div class="columns">                 <div class="column is-offset-4 is-4">                     <form method="POST">                         <div class="field has-addons">                             <div class="control is-expanded">                                 <input class="input" type="text" placeholder="City Name">                             </div>                             <div class="control">                                 <button class="button is-info">                                     Add City                                 </button>                             </div>                         </div>                     </form>                 </div>             </div>         </div>     </section>     <section class="section">         <div class="container">             <div class="columns">                 <div class="column is-offset-4 is-4">                     <div class="box">                         <article class="media">                             <div class="media-left">                                 <figure class="image is-50x50">                                     <img src="http://openweathermap.org/img/w/10d.png" alt="Image">                                 </figure>                             </div>                             <div class="media-content">                                 <div class="content">                                     <p>                                         <span class="title">Las Vegas</span>                                         <br>                                         <span class="subtitle">29° F</span>                                         <br> thunderstorm with heavy rain                                     </p>                                 </div>                             </div>                         </article>                     </div>                 </div>             </div>         </div>     </section>     <footer class="footer">     </footer> </body> </html> 

Bây giờ ta đã tạo mẫu của bạn , hãy tạo một dạng xem và kết hợp URL để ta có thể thực sự thấy mẫu này trong ứng dụng của bạn .

Các khung nhìn trong Django là các hàm hoặc các lớp. Trong trường hợp của ta vì ta đang tạo một dạng xem đơn giản, ta sẽ tạo một hàm. Thêm chức năng này vào views.py :

the_weather / weather / views.py
 from django.shortcuts import render  def index(request):     return render(request, 'weather/index.html') #returns the index.html template 

Ta đặt tên index chế độ xem của bạn vì nó sẽ nằm ở index của ứng dụng của ta , là URL root . Để kết xuất mẫu, ta trả về yêu cầu, cần thiết cho chức năng kết xuất và tên của file mẫu mà ta muốn kết xuất, trong trường hợp này là weather/index.html .

Hãy thêm URL sẽ gửi yêu cầu đến chế độ xem này. Trong các url . py cho ứng dụng, cập nhật danh sách urlpatterns .

the_weather / weather / urls.py
 from django.urls import path from . import views  urlpatterns = [     path('', views.index),  #the path for our index view ] 

Điều này cho phép ta tham chiếu chế độ xem ta vừa tạo.

Django sẽ trùng với bất kỳ URL nào không có điểm cuối và định tuyến nó đến chức năng xem mà ta đã tạo.

Quay lại root dự án của bạn, khởi động server và truy cập lại 127.0.0.1:8000 .

  • python manage.py runserver

Đã trả lại mẫu

Những gì ta thấy bây giờ chỉ là kết quả của HTML bạn có trong index.html . Bạn sẽ thấy thông tin đầu vào để thêm city và thời tiết cho Las Vegas. Tuy nhiên, biểu mẫu không hoạt động và thời tiết chỉ là một trình giữ chỗ, nhưng đừng lo lắng, vì ta sẽ tạo chúng cho ứng dụng này.

Sử dụng API thời tiết

Điều ta muốn làm bây giờ là đăng ký API Bản đồ Thời tiết Mở . Điều này sẽ cho phép ta nhận được thời tiết theo thời gian thực cho bất kỳ city nào mà ta thêm vào ứng dụng của bạn .

Truy cập trang web, tạo account và sau đó đi tới các khóa API trên trang tổng quan của họ. Nhập tên và tạo khóa API mới. Khóa này sẽ cho phép ta sử dụng API để xem thời tiết.

Mở  Control panel  Bản đồ Thời tiết

Một điểm cuối mà ta sẽ sử dụng ở bên dưới, vì vậy bạn có thể xem dữ liệu được trả về bằng cách sửa đổi URL sau bằng khóa API của bạn và chuyển đến URL trong trình duyệt của bạn. Có thể mất vài phút để khóa API của bạn hoạt động, vì vậy, nếu lúc đầu nó không hoạt động, hãy thử lại sau vài phút.

http://api.openweathermap.org/data/2.5/weather?q=las%20vegas&units=imperial&appid=YOUR_APP_KEY 

Cùng với đó, hãy thêm một yêu cầu để nhận dữ liệu vào ứng dụng của ta .

Trước tiên, ta cần cài đặt các yêu cầu để có thể gọi API từ bên trong ứng dụng của bạn .

  • pipenv install requests

Hãy cập nhật chế độ xem index của ta để gửi yêu cầu đến URL mà ta có.

the_weather / weather / views.py
 from django.shortcuts import render import requests  def index(request):     url = 'http://api.openweathermap.org/data/2.5/weather?q={}&units=imperial&appid=YOUR_APP_KEY'     city = 'Las Vegas'     city_weather = requests.get(url.format(city)).json() #request the API data and convert the JSON to Python data types      return render(request, 'weather/index.html') #returns the index.html template 

Với ba dòng đó, ta đang thêm URL mà ta sẽ gửi yêu cầu. Ta sẽ đặt một phần của city làm chỗ dành sẵn khi ta cho phép user thêm city của riêng họ.

Hiện tại, ta sẽ đặt city là Las Vegas, nhưng sau này điều này sẽ được đặt thành các city từ database .

Cuối cùng, ta sẽ gửi yêu cầu đến URL bằng cách sử dụng city và nhận đại diện JSON của city đó. Nếu ta in nó ra console , ta có thể thấy cùng một dữ liệu mà ta đã thấy khi ta đặt URL vào thanh địa chỉ của bạn .

Nếu khởi động lại server và reload trang, bạn sẽ thấy dữ liệu được in vào console của bạn .

Dữ liệu API

Hiển thị Dữ liệu trong Mẫu

Tiếp theo, ta cần chuyển dữ liệu vào mẫu để nó có thể được hiển thị cho user .

Hãy tạo một từ điển để chứa tất cả dữ liệu ta cần. Trong số dữ liệu trả về cho ta , ta cần tạm thời, mô tả và biểu tượng.

the_weather / weather / views.py
def index(request):     ...     weather = {         'city' : city,         'temperature' : city_weather['main']['temp'],         'description' : city_weather['weather'][0]['description'],         'icon' : city_weather['weather'][0]['icon']     }      return render(request, 'weather/index.html') #returns the index.html template 

Bây giờ ta có tất cả thông tin ta muốn, ta có thể chuyển nó vào mẫu. Để chuyển nó vào mẫu, ta sẽ tạo một biến được gọi là ngữ cảnh. Đây sẽ là một từ điển cho phép ta sử dụng các giá trị của nó bên trong mẫu.

the_weather / weather / views.py
def index(request):     ...     context = {'weather' : weather}     return render(request, 'weather/index.html', context) #returns the index.html template 

Và sau đó trong kết xuất, ta sẽ thêm ngữ cảnh làm đối số thứ ba.

Với dữ liệu thời tiết được thêm vào bên trong ngữ cảnh, hãy chuyển đến mẫu để thêm dữ liệu.

Bên trong mẫu, tất cả những gì ta cần làm là sửa đổi HTML để sử dụng các biến thay vì các giá trị mà tôi đã nhập. Các biến sẽ sử dụng thẻ {{}} và chúng sẽ tham chiếu bất kỳ thứ gì bên trong từ điển ngữ cảnh của bạn.

Lưu ý Django chuyển đổi các khóa từ điển nên bạn chỉ có thể truy cập chúng bằng ký hiệu dấu chấm. Ví dụ, weather.city sẽ cung cấp cho ta tên city . Ta không sử dụng weather['city'] như ta sử dụng trong Python.

Tìm div hộp và cập nhật nó vào:

the_weather / weather / templates / weather / index.html
<div class="box">     <article class="media">         <div class="media-left">             <figure class="image is-50x50">                 <img src="http://openweathermap.org/img/w/{{ weather.icon }}.png" alt="Image">             </figure>         </div>         <div class="media-content">             <div class="content">                 <p>                     <span class="title">{{ weather.city }}</span>                     <br>                     <span class="subtitle">{{ weather.temperature }}° F</span>                     <br> {{ weather.description }}                 </p>             </div>         </div>     </article> </div> 

Với tất cả các biến được thay thế, bây giờ ta sẽ thấy thời tiết hiện tại cho city của ta .

Thời tiết ở Las Vegas

Bây giờ ta có thể xem thời tiết cho một city , nhưng ta đã phải khó mã hóa city . Những gì ta muốn làm bây giờ là lấy từ database và hiển thị các city có trong database của ta .

Để làm điều đó, ta sẽ tạo một bảng trong database của bạn để chứa các city mà ta muốn biết thời tiết. Ta sẽ tạo một mô hình cho việc này.

models.py file models.py trong ứng dụng thời tiết của bạn và thêm thông tin sau:

the_weather / weather / models.py
from django.db import models  class City(models.Model):     name = models.CharField(max_length=25)      def _str_(self): #show the actual city name on the dashboard         return self.name      class Meta: #show the plural of city as cities instead of citys         verbose_name_plural = 'cities' 

Thao tác này sẽ tạo một bảng trong database của ta , cột này sẽ có một cột được gọi là tên, là tên của city . Thành phố này sẽ là một charfield , chỉ là một chuỗi.

Để có được những thay đổi này trong database , ta phải chạy makemigrations để tạo mã cập nhật database và di chuyển để áp dụng những thay đổi đó. Hãy làm điều đó ngay bây giờ:

  • python manage.py makemigrations
  • python manage.py migrate

Ta cần phải đến nơi ta có thể thấy mô hình này trên console quản trị của ta . Để làm điều đó, ta cần đăng ký nó trong file admin.py của ta .

the_weather / weather / admin.py
from django.contrib import admin from .models import City  admin.site.register(City) 

Bạn sẽ thấy city là một tùy chọn trên console quản trị.

Các city  trên Trang tổng quan dành cho  administrator

Sau đó, ta có thể đi vào console quản trị và thêm một số city . Tôi sẽ bắt đầu với ba: London, Tokyo và Las Vegas.

Thời tiết ba city

Với các mục nhập trong database , ta cần truy vấn các mục nhập này trong chế độ xem của bạn . Bắt đầu bằng lệnh mô hình Thành phố và sau đó truy vấn mô hình đó cho tất cả các đối tượng.

the_weather / weather / views.py
from django.shortcuts import render import requests from .models import City 
the_weather/weather/views.py ... def index(request):     url = 'http://api.openweathermap.org/data/2.5/weather?q={}&units=imperial&appid=YOUR_APP_KEY'     cities = City.objects.all() #return all the cities in the database     ... 

Vì ta có danh sách các city , ta muốn lặp lại chúng và lấy thời tiết cho từng city và thêm nó vào danh sách cuối cùng sẽ được chuyển đến mẫu.

Đây chỉ là một biến thể của những gì ta đã làm trong trường hợp đầu tiên. Sự khác biệt khác là ta đang lặp lại và nối mỗi từ điển vào một danh sách. Ta sẽ xóa biến city ban đầu để thay thế biến city trong vòng lặp:

the_weather / weather / views.py
def index(request):     ...     weather_data = []      for city in cities:          city_weather = requests.get(url.format(city)).json() #request the API data and convert the JSON to Python data types          weather = {             'city' : city,             'temperature' : city_weather['main']['temp'],             'description' : city_weather['weather'][0]['description'],             'icon' : city_weather['weather'][0]['icon']         }          weather_data.append(weather) #add the data for the current city into our list      context = {'weather_data' : weather_data}     ... 

Bây giờ hãy cập nhật ngữ cảnh để chuyển danh sách này thay vì một từ điển duy nhất.

the_weather / weather / views.py
     ...     context = {'weather_data' : weather_data}     ... 

Tiếp theo, bên trong mẫu, ta cần lặp lại danh sách này và tạo HTML cho từng city trong danh sách. Để làm điều này, ta có thể đặt một vòng lặp for xung quanh HTML để tạo ra một hộp duy nhất cho city .

the_weather / weather / index.html
<div class="column is-offset-4 is-4">     {% for weather in weather_data %}     <div class="box">         <article class="media">             <div class="media-left">                 <figure class="image is-50x50">                     <img src="http://openweathermap.org/img/w/{{ weather.icon }}.png" alt="Image">                 </figure>             </div>             <div class="media-content">                 <div class="content">                     <p>                         <span class="title">{{ weather.city }}</span>                         <br>                         <span class="subtitle">{{ weather.temperature }}° F</span>                         <br> {{ weather.description }}                     </p>                 </div>             </div>         </article>     </div>     {% endfor %} </div> 

Bây giờ ta có thể xem dữ liệu của tất cả các city mà ta có trong database .

Tạo biểu mẫu

Điều cuối cùng ta muốn làm là cho phép user thêm một city trực tiếp vào biểu mẫu.

Để làm điều đó, ta cần tạo một biểu mẫu. Ta có thể tạo biểu mẫu trực tiếp, nhưng vì biểu mẫu của ta sẽ có chính xác trường giống như mô hình của ta , ta có thể sử dụng ModelForm .

Tạo một file mới có tên là forms.py

the_weather / weather / form.py
from django.forms import ModelForm, TextInput from .models import City  class CityForm(ModelForm):     class Meta:         model = City         fields = ['name']         widgets = {             'name': TextInput(attrs={'class' : 'input', 'placeholder' : 'City Name'}),         } #updates the input class to have the correct Bulma class and placeholder 

Để xem biểu mẫu, ta cần tạo biểu mẫu trong chế độ xem của bạn và chuyển nó vào mẫu.

Để làm điều đó, hãy cập nhật video lập index để tạo biểu mẫu. Ta sẽ thay thế biến city cũ cùng một lúc vì ta không cần nó nữa. Ta cũng cần cập nhật ngữ cảnh để biểu mẫu được chuyển đến mẫu.

the_weather / weather / views.py
 def index(request):     ...     form = CityForm()      weather_data = []     ...     context = {'weather_data' : weather_data, 'form' : form} 

Bây giờ trong mẫu, hãy cập nhật phần biểu mẫu để sử dụng biểu mẫu từ chế độ xem của ta và một csrf_token , cần thiết cho các yêu cầu POST trong Django.

<form method="POST">     {% csrf_token %}     <div class="field has-addons">         <div class="control is-expanded">             {{ form.name }}         </div>         <div class="control">             <button class="button is-info">                 Add City             </button>         </div>     </div> </form> 

Với hình thức trong hoạt động HTML của ta , bây giờ ta cần phải xử lý các dữ liệu mẫu vì nó đi kèm trong. Cho rằng, ta sẽ tạo một if khối kiểm tra cho một yêu cầu POST. Ta cần thêm kiểm tra cho loại yêu cầu trước khi bắt đầu lấy dữ liệu thời tiết để ta ngay lập tức nhận được dữ liệu cho city mà ta thêm.

the_weather / weather / views.py
def index(request):     cities = City.objects.all() #return all the cities in the database      url = 'http://api.openweathermap.org/data/2.5/weather?q={}&units=imperial&appid=YOUR_APP_KEY'      if request.method == 'POST': # only true if form is submitted         form = CityForm(request.POST) # add actual request data to form for processing         form.save() # will validate and save if validate      form = CityForm()     ... 

Bằng cách chuyển request.POST , ta sẽ có thể xác thực dữ liệu biểu mẫu.

Đến đây bạn sẽ có thể nhập tên của một city , nhấp vào thêm và thấy nó hiển thị. Tôi sẽ thêm Miami là city tiếp theo.

Biểu mẫu được gửi với city  mới

Khi ta thả ra khỏi if khối, hình thức sẽ được tái tạo vì vậy ta có thể thêm một city khác, nếu ta lựa chọn. Phần còn lại của mã sẽ hoạt động theo cách tương tự.

Kết luận

Bây giờ ta có một cách để theo dõi thời tiết cho nhiều city trong ứng dụng của bạn .

Trong bài viết này, ta đã phải làm việc với các phần khác nhau của Django để làm việc này: khung nhìn, mô hình, biểu mẫu và mẫu. Ta cũng phải sử dụng các yêu cầu thư viện Python để lấy dữ liệu thời tiết thực tế. Vì vậy, mặc dù ứng dụng đơn giản, bạn sẽ sử dụng nhiều khái niệm giống nhau trong các ứng dụng phức tạp hơn.


Tags:

Các tin liên quan