Django入門教程(做個(gè)疫情數(shù)據(jù)報(bào)告)

1
?初識(shí)Django
我使用的 Python 版本是 3.8,先執(zhí)行下面語句先安裝 Django?
pip install?Django安裝完成后,執(zhí)行下面語句創(chuàng)建 Django 項(xiàng)目
django-admin startproject duma項(xiàng)目的名稱可以自定義,我創(chuàng)建的項(xiàng)目名是 duma。
命令執(zhí)行完畢后,在當(dāng)前目錄會(huì)生成 duma 目錄,該目錄包含以下源文件。
duma/
????manage.py
????duma/
????????__init__.py
????????settings.py
????????urls.py
????????asgi.py
????????wsgi.py簡(jiǎn)單介紹下這幾個(gè)文件的作用:
manage.py: 管理 Django 項(xiàng)目的命令行工具,就像一個(gè)工具箱,后面會(huì)經(jīng)常用到
mysite/settings.py:Django 項(xiàng)目的配置文件,如:配置該項(xiàng)目使用什么數(shù)據(jù)庫、包含哪些應(yīng)用等
mysite/urls.py:Django 項(xiàng)目的 URL 聲明
mysite/asgi.py:作為你的項(xiàng)目的運(yùn)行在 ASGI 兼容的 Web 服務(wù)器上的入口。暫時(shí)用不到
mysite/wsgi.py:作為你的項(xiàng)目的運(yùn)行在 WSGI 兼容的Web服務(wù)器上的入口。暫時(shí)用不到
后面的學(xué)習(xí)中,我們會(huì)使用、修改這上面的文件,那時(shí)候?qū)λ麄兊淖饔脮?huì)有更深的體會(huì)。
運(yùn)行下面命令,啟動(dòng)web服務(wù),驗(yàn)證 duma 項(xiàng)目是否創(chuàng)建成功。
python?manage.py?runserver執(zhí)行命令,會(huì)看到有以下信息輸出
Starting development server at http://127.0.0.1:8000/在瀏覽器訪問?http://127.0.0.1:8000/?

看到上面的頁面,說明項(xiàng)目創(chuàng)建成功。

接下來我們要在 duma 項(xiàng)目中創(chuàng)建一個(gè)應(yīng)用(app)。一個(gè)項(xiàng)目里可以有多個(gè)應(yīng)用,如電商項(xiàng)目里可以有商城應(yīng)用、支付應(yīng)用和會(huì)員應(yīng)用等等。
執(zhí)行這行命令,創(chuàng)建一個(gè)應(yīng)用
python?manage.py?startapp ncov這里創(chuàng)建了一個(gè)名為 ncov 的應(yīng)用,用它來做一個(gè)疫情數(shù)據(jù)報(bào)告。項(xiàng)目根目錄會(huì)發(fā)現(xiàn)有個(gè) ncov 目錄,包含以下文件
ncov/
????__init__.py
????admin.py
????apps.py
????migrations/
????????__init__.py
????models.py
????tests.py
????views.py先不介紹它們的作用,這些文件后面基本都會(huì)用到,到時(shí)候會(huì)詳細(xì)介紹。
2
?Hello, World
from?django.http import?HttpResponse
def?index(request):
????return?HttpResponse('Hello, World!')from?django.urls import?path
from?. import?views
urlpatterns = [
????path('', views.index, name='index'),
]from?django.contrib import?admin
from?django.urls import?path, include
urlpatterns = [
????path('admin/', admin.site.urls),
????path('ncov/', include('ncov.urls')),
]

3
?連接數(shù)據(jù)庫
DATABASES = {
????'default': {
????????'ENGINE': 'django.db.backends.sqlite3',
????????'NAME': BASE_DIR / 'db.sqlite3',
????}
}from?django.db import?models
class?CyStat(models.Model):
????stat_dt = models.CharField(max_length=10) # 日期
????cy_name = models.CharField(max_length=50) # 國家名稱
????confirm = models.IntegerField() # 累計(jì)確診
????dead = models.IntegerField() # 累計(jì)死亡
????heal = models.IntegerField() # 累計(jì)治愈
????today_confirm = models.IntegerField() # 現(xiàn)有確診
????today_new_confirm = models.IntegerField() # 新增確診INSTALLED_APPS?= [
????'django.contrib.admin',
????'django.contrib.auth',
????'django.contrib.contenttypes',
????'django.contrib.sessions',
????'django.contrib.messages',
????'django.contrib.staticfiles',
????'ncov.apps.NcovConfig'??# 注冊(cè) ncov 應(yīng)用
]python?manage.py?makemigrations ncovMigrations
for?'ncov':
??ncov/migrations/0001_initial.py
????- Create model CyStat
python?manage.py?sqlmigrate ncov 0001BEGIN;
--
-- Create model CyStat
--
CREATE?TABLE?"ncov_cystat"?("id"?integer?NOT?NULL?PRIMARY KEY?AUTOINCREMENT, "stat_dt"?varchar(10) NOT?NULL, "cy_name"?varchar(50) NOT?NULL, "confirm"?integer?NOT?NULL, "dead"?integer?NOT?NULL, "heal"?integer?NOT?NULL, "today_confirm"?integer?NOT?NULL, "today_new_confirm"?integer?NOT?NULL);
COMMIT;python?manage.py?migratesqlite3?db.sqlite3sqlite>?.tables
auth_group django_admin_log
auth_group_permissions django_content_type
auth_permission django_migrations
auth_user django_session
auth_user_groups ncov_cystat
auth_user_user_permissions
4
?編寫web頁面
sqlite> insert into?ncov_cystat(stat_dt, cy_name, confirm, dead, heal, today_confirm, today_new_confirm) VALUES?("2021-09-03", "cn", 123169, 5685, 115024, 2460, 33);
sqlite> insert into?ncov_cystat(stat_dt, cy_name, confirm, dead, heal, today_confirm, today_new_confirm) VALUES?("2021-09-04", "cn", 123199, 5685, 115105, 2409, 30);
...from?django.shortcuts import?render
from?.models import?CyStat
def?index(request):
????cy_stats = CyStat.objects.filter(cy_name='cn').order_by('-stat_dt')[:7]
????context = {
????????'cy_stats': cy_stats
????}
????return?render(request, 'ncov/index.html', context)<h3>國內(nèi)疫情數(shù)據(jù)h3>
<table?border="1">
????<tr>
????????<td>日期td>
????????<td>現(xiàn)有確診td>
????????<td>新增確診td>
????tr>
????{% for stat in cy_stats %}
????<tr>
????????<td>?{{ stat.stat_dt }} td>
????????<td>?{{ stat.today_confirm }} td>
????????<td>?{{ stat.today_new_confirm }} td>
????tr>
????{% endfor %}
table>


from?django.http import?HttpResponse
from?django.shortcuts import?render
from?pyecharts.charts import?Line, Map
from?pyecharts import?options as?opts
from?.models import?CyStat
def?index(request):
????cy_stat = CyStat.objects.filter(cy_name='cn').order_by('-stat_dt')[:14]
????stat_list = [x.stat_dt for?x in?cy_stat]
????stat_list.reverse()
????today_confirm_list = [x.today_confirm for?x in?cy_stat]
????today_confirm_list.reverse()
????today_new_confirm_list = [x.today_new_confirm for?x in?cy_stat]
????today_new_confirm_list.reverse()
????c = (
????????Line()
????????.add_xaxis(stat_list)
????????.add_yaxis("現(xiàn)有確診", today_confirm_list)
????????.add_yaxis("新增確診", today_new_confirm_list)
????????.set_global_opts(title_opts=opts.TitleOpts(title="國內(nèi)疫情數(shù)據(jù)"))
????)
????return?HttpResponse(c.render_embed())


3、爆強(qiáng)!直接把 Python 編寫的圖形程序打包為安卓 APP
4、為什么阿里巴巴/騰訊不去開發(fā)被卡脖子的工業(yè)軟件?
5、Windows重要功能被閹割,全球用戶怒噴數(shù)月后微軟終于悔改

