1 什麼是Django
Django是一個開放源代碼的Web應用架構,由Python寫成。采用了MTV的架構模式,即模型M(Model),視圖V(View)和模版T(Template)。
使用這種架構,程式員可以友善、快捷地建立高品質、易維護、資料庫驅動的應用程式。
在Django架構中,還包含許多功能強大的第三方插件,使得Django具有較強的可擴充性。
Django的主要目的是簡便、快速的開發資料庫驅動的網站。它強調代碼複用,多個元件可以很友善的以“插件”形式服務于整個架構。
本文操作環境:
Python 3.7.1 (官網下載下傳https://www.python.org/downloads/)
Django 3.0.2
(pip install django官網pip下載下傳https://pypi.org/project/pip/#files)
2 選擇建立項目路徑
2.1、建立mysite項目名和blog應用
選擇項目路徑有兩種情況:
1.打開cmd,cd+路徑。(打開cmd預設是C槽的,一般情況建立項目都不在C槽,例如在D:/test。那麼首先要切換到D盤,終端先輸入D:回車,再cd test回車)。
C:\Users\admin>D:D:\>cd testD:\test>
2.同樣是D:/test作為項目目錄,打開D盤下的test檔案夾,滑鼠右鍵空白處在彈出的選項中點選 在此處打開指令視窗 (這樣就直接在cmd打開test路徑了)。
D:\test>
3 建立項目
注意是在D盤test目錄下輸入指令,test作為項目目錄。
# 建立mysite項目D:\test>django-admin startproject mysite# 切換到mysite目錄D:\test>cd mysite# 建立blog應用D:\test\mysite>python manage.py startapp blog
3.1、項目目錄結構為:
3.2、項目目錄介紹:
manage.py:Django項目裡面的工具,通過它可以調用django shell和資料庫等。 mysite/ --- settings.py:包含了項目的預設設定,資料庫資訊,調試标志 ,還有其他設定,比如靜态檔案、媒體檔案的根目錄等。 --- urls.py :負責把URL 配置 模式映射到應用程式。 --- wsgi.py:用于項目部署。 blog / --- admin.py:django 自帶admin後面管理,将models.py 中表映射到背景。 --- apps.py:blog 應用的相關配置。 --- models.py:Django 自帶的ORM ( 對象關系映射 ) ,用于設計資料庫表。 --- tests.py:用于編寫Django單元測試。 --- veiws.py :視圖檔案,用于編寫功能的主要處理邏輯。
3.3、setting.py配置檔案,添加blog應用:
# Application definitionINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #新增的blog應用 由python manage.py startapp blog 生成的blog應用 'blog',]
4 初始化admin背景資料庫
4.1、Python 自帶SQLite3資料庫,Django預設使用SQLite3資料庫,如果使用其它資料庫請在settings.py檔案中設定
# Database# https://docs.djangoproject.com/en/3.0/ref/settings/#databasesDATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }}
# Django使用mysql資料庫設定DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'blog', 'USER':'root', 'PASSWORD':'123456', 'HOST':'127.0.0.1', 'PORT':'3306', }}
4.2、Django預設幫我們做了很多事情,比如User、Session 這些都需要建立表來存儲資料,Django已經把這些子產品幫我們準備好了,我們隻需要執行資料庫同步,把相關表生成出來即可:
D:\test\mysite>python manage.py migrateOperations to perform: Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
4.3、建立超級管理者帳号,登入admin背景,必須要有帳号
D:\test\mysite>python manage.py createsuperuserUsername (leave blank to use 'admin'): admin # 管理者帳号Email address: [email protected] # email,任意輸入一個就行Password: # 密碼,輸入的時候不顯示出來,其實輸入了Password (again): # 重複密碼#下面這段提示意思是,因為我輸入的密碼是admin,過于簡單,測試階段可以用簡單密碼,實戰就需要複雜點,按要求設定,最少8個字元The password is too similar to the username. This password is too short. It must contain at least 8 characters.This password is too common.#詢問你是否跳過密碼驗證,輸入y回車即可Bypass password validation and create user anyway? [y/N]: ySuperuser created successfully.
5 啟動項目,通路admin背景
D:\test\mysite>python manage.py runserverWatching for file changes with StatReloaderPerforming system checks...System check identified no issues (0 silenced).January 08, 2020 - 09:58:29Django version 3.0.2, using settings 'mysite.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.
5.1、浏覽器通路:http://127.0.0.1:8000
預設是英文版本,設定中文背景與時區:
setting.py檔案下設定。
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'
5.2、通路Admin背景:http://127.0.0.0:8000/admin,通過前面建立的超級管理者賬号登入
5.3、登入之後進入到背景首頁面
到此,準備工作結束。
6 設計Model(設計資料庫表)
6.1、設計blog表
打開blog目錄下的models.py檔案,該類下的屬性對應資料庫字段。
from django.db import models# Create your models here.class BlogsPost(models.Model): title = models.CharField(max_length = 150) # 部落格标題 body = models.TextField() # 部落格正文 timestamp = models.DateTimeField() # 建立時間
6.2、再次執行資料庫同步,因為剛新增了資料模型表
會提示生成了0001_initial.py檔案,該檔案在blog應用下的_py_cache_檔案下。
D:\test\mysite>python manage.py makemigrations blogMigrations for 'blog': blog\migrations\0001_initial.py - Create model BlogsPost
6.3、把剛生成的0001_initial.py檔案更新到資料庫
D:\test\mysite>python manage.py migrateOperations to perform:Apply all migrations: admin, auth, blog, contenttypes, sessionsRunning migrations:Applying blog.0001_initial... OK
6.4、通過Admin管理
通過Admin背景來管理blog表資料。打開blog應用下的admin.py 檔案。
from django.contrib import adminfrom blog.models import BlogsPost# Register your models here.class BlogsPostAdmin(admin.ModelAdmin): list_display = ['title', 'body', 'timestamp']admin.site.register(BlogsPost, BlogsPostAdmin)
6.5、登入Admin背景添加blog
再次啟動項目(python manage.py runserver),通路:http://127.0.0.1:8000/admin。
Django背景首頁面上會多出Blog應用。
點選Add添加資料。
Time後面擷取目前時間預設是不對的,相差了8小時。
在你的Django項目中setting.py找到TIME_ZONE配置,可以看到預設的是"UTC",這時需要把他更改為我們所在的時區,進行如下設定:
TIME_ZONE = 'Asia/Shangha
就ok了
6.6、點選SAVE 按鈕儲存,部落格編寫完成。
到此,資料部分已經搞定。
7 建立視圖
7.1、建立視圖函數
打開blog應用下的views.py檔案:
from django.shortcuts import renderfrom blog.models import BlogsPost# Create your views here.def blog_index(request): blog_list = BlogsPost.objects.all() # 擷取所有資料 return render(request,'index.html', {'blog_list':blog_list}) # 傳回index.html頁面
7.2、建立視圖對應的模版
在blog應用下建立templates目錄(blog/templates/),在目錄下建立首頁檔案index.html,内容:(blog_list為視圖view.py定義的變量)。
{% for blog in blog_list %} <h2>{{ blog.title }}h2> <p>{{ blog.timestamp }}p> <p>{{ blog.body }}p>{% endfor %}
循環視圖view.py檔案渲染到頁面的blog_list集合,顯示标題,建立時間和正文。
blog_list = BlogPost.objects.all(),擷取資料庫裡面表中所有的BlogPost對象。
render傳回一個頁面(index.html),順帶把資料庫中查詢出來的所有部落格内容(blog_list)也一并傳回。
7.3、建立blog應用的url模式
在mysite/urls.py檔案裡添加blog的url:
from django.contrib import adminfrom django.urls import pathfrom blog import viewsurlpatterns = [ path('admin/', admin.site.urls), path('blog/', views.blog_index),]
7.4、 再次終端cmd啟動服務 cmd指令python manage.py runserver,通路(http://127.0.0.1:8000/blog/)。
到此,項目開發完成
(完)
看完本文有收獲?請轉發朋友圈分享給更多人吧
關注「Python家庭」一起輕松學Python
掃碼關注我們
原創不易,有幫助點個 “在看” 呗