Python全棧工程師學習筆記 | Django的快速入門

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

第一步:項目的創建與運行

(1). 創建項目

如果這是你第一次使用 Django,那麼你必須要照顧一些初始設置。也就是說,您需要自動生成一些建立 Django 項目的代碼

從命令行cd到您要存儲代碼的目錄,然後運行以下命令:

1$django-adminstartprojectmyweb

我們來看看startproject創建的內容:

1[root@localhostmyweb]#tree2.3├──manage.py4└──myweb5├──__init__.py6├──settings.py7├──urls.py8└──wsgi.py

關於上面自動生成的目錄與文件解釋如下:

  • 外部myweb/根目錄只是一個項目的容器。它的名字與Django無關; 您可以將其重命名為您喜歡的任何內容。

  • manage.py:一個命令行實用程序,可以讓您以各種方式與此Django項目進行交互。你可以閱讀所有的細節 manage.py在Django的管理和manage.py。

  • 內部myweb/目錄是您的項目的實際Python包。它的名字是您需要用來導入其中的任何內容的Python包名稱(例如myweb.urls)。

  • myweb/init.py:一個空的文件,告訴Python這個目錄應該被認為是一個Python包。

  • myweb/settings.py:此Django項目的設置/配置。 Django設置會告訴你所有關於設置的工作原理。

  • myweb/urls.py:該Django項目的URL聲明; 您的Django動力網站的「目錄」。

  • myweb/wsgi.py:WSGI兼容的Web服務器為您的項目提供服務的入口點。

(2). 運行開發服務器

我們來驗證您的Django項目的作品。更改為外部myweb目錄,如果您還沒有,並運行以下命令:

1$pythonmanage.pyrunserver23註:若當前環境中有兩個python環境,可使用python3或python3.6命令來調用3.6的環境,如:4$python3manage.pyrunserver

您將在命令行中看到以下輸出:

 1Performingsystemchecks... 2 3Systemcheckidentifiednoissues(0silenced). 4 5Youhaveunappliedmigrations;yourappmaynotworkproperlyuntiltheyareapplied. 6Run'pythonmanage.pymigrate'toapplythem.(注意:現在忽略關於未執行應用數據庫遷移的警告) 7 8August07,2017-15:50:53 9Djangoversion1.11,usingsettings'myweb.settings'10Startingdevelopmentserverathttp://127.0.0.1:8000/11QuittheserverwithCONTROL-C.

以上說明已經開始使用Django的開發服務器,這是一個純粹以Python編寫的輕量級Web服務器。 我們將其與Django結合在一起,因此您可以快速開發,而無需處理配置生產服務器(如Apache),直到您準備好生產。

默認情況下,該runserver命令在端口8000的內部IP上啟動開發服務器。當然也可以指定端口開啟服務,如8080端口:

1$pythonmanage.pyrunserver8080

如果要更改服務器的IP,請將其與端口一起傳遞。例如:

1$pythonmanage.pyrunserver0:8000

注意:通過IP訪問後報如下錯誤:

1DisallowedHostat/polls2InvalidHTTP_HOSTheader:'192.168.*.*:8000'.Youmayneedtoadd'192.168.*.*'toALLOWED_HOSTS.34HTTP_HOST標頭無效:'192.168.*.*:8000'。您可能需要將「192.168.*.*」添加到ALLOWED_HOSTS5如:ALLOWED_HOSTS=['192.168.104.240']6或:ALLOWED_HOSTS=['192.168.104.240','localhost','127.0.0.1']7或支持所有ALLOWED_HOSTS=['*']

第二步:應用的創建

(1). 創建一個應用程序

Django自帶一個實用程序,可以自動生成應用程序的基本目錄結構,因此您可以專注於編寫代碼而不是創建目錄。

要創建您的應用程序,請確保您與目錄位於同一目錄,manage.py 並鍵入以下命令:

1$pythonmanage.pystartappmyapp23註:若當前環境中有兩個python環境,可使用python3或python3.6命令來調用3.6的環境,如:4$python3manage.pystartappmyapp

這將創建一個目錄myapp,其目錄如下:此目錄結構將容納輪詢應用程序。

 1[root@localhostdemo]#treemyweb/ 2myweb/ 3├──manage.py 4├──myweb 5│├──__init__.py 6│├──settings.py 7│├──urls.py 8│└──wsgi.py 9└──myapp10├──admin.py11├──apps.py12├──__init__.py13├──migrations14│└──__init__.py15├──models.py16├──tests.py17└──views.py

(2). 編寫我們的第一個視圖

我們來寫第一個視圖。打開文件myapp/views.py 並放入以下Python代碼:

1fromdjango.httpimportHttpResponse23defindex(request):4returnHttpResponse("Hello,world.You'reatthemyappindex.")

這是Django中最簡單的視圖。要調用視圖,我們需要將其映射到一個URL – 為此,我們需要一個URLconf。

要在myapp目錄中創建一個URLconf,創建一個名為urls.py。您的應用目錄應該如下所示:

 1└──myapp 2├──admin.py 3├──apps.py 4├──__init__.py 5├──migrations 6│└──__init__.py 7├──models.py 8├──tests.py 9├──urls.py10└──views.py

在myapp/urls.py文件中包含以下代碼:

1fromdjango.conf.urlsimporturl23from.importviews45urlpatterns=[6url(r'^$',views.index,name='index'),7]

下一步是將根URLconf指向myapp.urls模塊。 在myweb/urls.py添加一條import用於django.conf.urls.include和插入include()的urlpatterns列表,所以你必須:

1fromdjango.conf.urlsimportinclude,url2fromdjango.contribimportadmin34urlpatterns=[5url(r'^admin/',admin.site.urls),6url(r'^myapp/',include('myapp.urls')),7]

其中include()函數允許引用其他URLconfs。請注意,該include()函數的正則表達式 沒有$(字符串匹配字符),而是尾部的斜杠。 每當Django遇到時 include(),它會排除與該點匹配的任何部分,並將剩餘的字符串發送到隨附的URLconf進行進一步處理。

背後的想法include()是使即插即用的URL變得容易。由於民意調查是在自己的URLconf(myapp/urls.py)中,它們可以被放置在「/myapp/」下面,或者在「/ fun_myapp /」下面,或者在「/ content /myapp/」或其他路徑根目錄下,工作。

註:include()當您包含其他網址格式時,您應始終使用。 admin.site.urls是唯一的例外。

您現在已將index視圖連接到URLconf中。讓它驗證它的工作,運行以下命令:

1$pythonmanage.pyrunserver0:8000

在瀏覽器中轉到http:// localhost:8000 /myapp/,您應該看到文本”Hello, world. You’re at themyappindex.”

(3). 附錄:url() 函數介紹

Djangourl() 可以接收四個參數,分別是兩個必選參數:regex、view和兩個可選參數:kwargs、name,接下來詳細介紹這四個參數。

  • regex: 正則表達式,與之匹配的 URL 會執行對應的第二個參數 view。

  • view: 用於執行與正則表達式匹配的 URL 請求。

  • kwargs: 視圖使用的字典類型的參數。

  • name: 用來反向獲取 URL。

第三步:項目的模型

(1). 連接MySQL數據庫設置

默認情況下,配置使用SQLite。若不使用SQLite作為數據庫,則需要額外的設置,例如 USER,PASSWORD和HOST必須加入。

其中ENGINE設置為數據庫後端使用。內置數據庫後端有:

  • ‘django.db.backends.postgresql’

  • ‘django.db.backends.mysql’

  • ‘django.db.backends.sqlite3’

  • ‘django.db.backends.oracle’

在myweb/settings.py 文件中,通過 DATABASES項進行數據庫設置

 1DATABASES={ 2'default':{ 3'ENGINE':'django.db.backends.mysql', 4'NAME':'mydemo', 5'USER':'root', 6'PASSWORD':'', 7'HOST':'localhost', 8'PORT':'3306', 9}10}

注意:Django使用MySQL數據庫需要安裝PyMySQL,若已經安裝請略過。

1$pipinstallpymysql

打開myweb/__init__.py,寫入以下代碼導入pymysql:

1importpymysql2pymysql.install_as_MySQLdb()

(2). 創建模型

在我們的簡單的應用程序中,去創建一個stu表信息操作的Model類。

編輯myapp/models.py文件

 1fromdjango.dbimportmodels 2 3#Createyourmodelshere. 4 5classStu(models.Model): 6'''自定義Stu表對應的Model類''' 7#定義屬性:默認主鍵自增id字段可不寫 8id=models.AutoField(primary_key=True) 9name=models.CharField(max_length=16)10age=models.SmallIntegerField()11sex=models.CharField(max_length=1)12classid=models.CharField(max_length=8)1314#定義默認輸出格式15def__str__(self):16return"%d:%s:%d:%s:%s"%(self.id,self.name,self.age,self.sex,self.classid)1718#自定義對應的表名,默認表名:myapp_stu19classMeta:20db_table="stu"

(3). 激活模型

要將該應用程序包括在我們的項目中,我們需要在設置中添加對其配置類的引用INSTALLED_APPS。

該 myappConfig班是在myapp/apps.py文件中,所以它的虛線路徑’myapp.apps.myappConfig’。

編輯myweb/settings.py文件,並將該虛線路徑添加到該INSTALLED_APPS設置。

1INSTALLED_APPS=[2'django.contrib.admin',3'django.contrib.auth',4'django.contrib.contenttypes',5'django.contrib.sessions',6'django.contrib.messages',7'django.contrib.staticfiles',8'myapp.apps.MyappConfig',#或者直接寫myapp9]

(4). 使用(兩種)

① 現在進入交互式的Python shell,並使用Django提供的免費API

 1C:\Users\張濤\Desktop\code\myweb>pythonmanage.pyshell 2Python3.6.4(v3.6.4:d48eceb,Dec192017,06:54:40)[MSCv.190064bit(AMD64)] 3onwin32 4Type"help","copyright","credits"or"license"formoreinformation. 5(InteractiveConsole) 6>>>frommyapp.modelsimportStu 7 8>>>mod=Stu.objects 9#獲取所有信息10>>>lists=mod.all()11>>>forvinlists:12...print(v)13...141:zhangsan:22:m:python03152:lisi:25:w:python04163:wangwu:20:m:python03174:zhaoliu:19:w:python04185:qq01:20:m:python03196:qq02:21:w:python04207:qq03:20:m:python05218:uu01:21:w:python04229:uu02:20:m:python052310:aa:29:w:python032411:bb:20:m:python042526#獲取單條信息27>>>mod.get(id=1)28<Stu:1:zhangsan:22:m:python03>29>>>mod.get(id=2)30<Stu:2:lisi:25:w:python04>31>>>mod.get(id=3)32<Stu:3:wangwu:20:m:python03>3334>>>

② 在myapp應用的視圖中使用

 1#文件:myapp/views.py文件代碼 2 3fromdjango.shortcutsimportrender 4fromdjango.httpimportHttpResponse 5frommyapp.modelsimportStu 6#Createyourviewshere. 7 8defindex(request): 9returnHttpResponse("HelloDjango!")1011defstu(request):12#獲取所有stu表信息13lists=Stu.objects.all()14print(lists)15#獲取單條學生信息16print(Stu.objects.get(id=1))1718returnHttpResponse("ok")

  • 配置stu函數的訪問路由

1#在myapp/urls.py文件中配置23url(r'^stu$',views.stu),

啟動服務後,在瀏覽器中訪問,在命令行終端中查看輸出效果:http://localhost:8000/myapp/stu

第四步:啟用網站Admin管理

(1).數據遷移

Django框架中有一個非常強大的應用功能–自動管理界面,常被Web平台管理者使用,去管理整個Web平台。

默認情況下,在settings.py配置文件中INSTALLED_APPS包含以下應用程序,這些應用程序都是由Django提供:

  • django.contrib.admin – 管理網站。你會很快使用它。

  • django.contrib.auth – 認證系統。

  • django.contrib.contenttypes – 內容類型的框架。

  • django.contrib.sessions – 會話框架

  • django.contrib.messages – 消息框架。

  • django.contrib.staticfiles – 管理靜態文件的框架。

為了後續的開發,默認這些應用程序都是包含在里面的。

使用這些Django自帶的應用程序,需要我們在數據庫中創建一些數據表對應,然後才能使用它們。為此,請運行以下命令(數據結構遷移):

1$pythonmanage.pymigrate

其中該migrate命令查看該INSTALLED_APPS設置,並根據myweb/settings.py文件中的數據庫設置和應用程序隨附的數據庫遷移創建任何必需的數據庫表(稍後將介紹)。您會看到適用於每個遷移的消息。

 1執行上面命令後的輸出結果 2Operationstoperform: 3Applyallmigrations:admin,auth,contenttypes,sessions 4Runningmigrations: 5Applyingcontenttypes.0001_initial...OK 6Applyingauth.0001_initial...OK 7Applyingadmin.0001_initial...OK 8Applyingadmin.0002_logentry_remove_auto_add...OK 9Applyingcontenttypes.0002_remove_content_type_name...OK10Applyingauth.0002_alter_permission_name_max_length...OK11Applyingauth.0003_alter_user_email_max_length...OK12Applyingauth.0004_alter_user_username_opts...OK13Applyingauth.0005_alter_user_last_login_null...OK14Applyingauth.0006_require_contenttypes_0002...OK15Applyingauth.0007_alter_validators_add_error_messages...OK16Applyingauth.0008_alter_user_username_max_length...OK17Applyingsessions.0001_initial...OK1819#默認情況下自動在我們的數據庫中創建了10張表,具體如下:20MariaDB[mydemo]>showtables;21+----------------------------+22|Tables_in_mydemo|23+----------------------------+24|auth_group|25|auth_group_permissions|26|auth_permission|27|auth_user|28|auth_user_groups|29|auth_user_user_permissions|30|django_admin_log|31|django_content_type|32|django_migrations|33|django_session|34|stu|35+----------------------------+3611rowsinset(0.00sec)

(2). 創建管理員用戶

首先,我們需要創建一個可以登錄管理站點的用戶。運行以下命令:

 1$pythonmanage.pycreatesuperuser 2 3#輸入您所需的用戶名,然後按Enter鍵。 4Username:admin 5 6#然後將提示您輸入所需的電子郵件地址: 7Emailaddress:[email protected] 8 9#最後一步是輸入你的密碼。您將被要求輸入密碼兩次,第二次作為第一次的確認10Password:**********11Password(again):*********12Superusercreatedsuccessfully.

(2). 啟動開發服務器

默認情況下,Django管理員站點被激活。讓我們開始開發服務器並探索它。

啟動開發服務器命令如下:

1$pythonmanage.pyrunserver0:8000

現在,打開一個Web瀏覽器,訪問地址:http://127.0.0.1:8000/admin/

(3). 設置時區和語言:

編輯myweb/settings.py配置文件:

1...23LANGUAGE_CODE='zh-hans'45TIME_ZONE='Asia/Shanghai'67...

(4). 將我們自定義的應用程序的加入到後台管理

但我們的自定義應用程序在哪里?並沒有顯示在後台管理索引頁面上。

要做到這一點,打開myapp/admin.py 文件,並編輯代碼如下:

1fromdjango.contribimportadmin23frommyapp.modelsimportStu45admin.site.register(Stu)

(5). 更深入設計後台管理

 1#編輯myapp/models.py文件,在Stu類中添加如下信息,讓後台管理顯示中文字段。 2 3classStu(models.Model): 4'''自定義Stu表對應的Model類''' 5#定義屬性:默認主鍵自增id字段可不寫 6id=models.AutoField("學號",primary_key=True) 7name=models.CharField("姓名",max_length=16) 8age=models.SmallIntegerField("年齡") 9sex=models.CharField("性別",max_length=1)10classid=models.CharField("班級",max_length=8)1112#定義默認輸出格式13def__str__(self):14return"%d:%s:%d:%s:%s"%(self.id,self.name,self.age,self.sex,self.classid)1516#自定義對應的表名,默認表名:myapp_stu17classMeta:18db_table="stu"19verbose_name='瀏覽學生信息'20verbose_name_plural='學生信息管理'

福利

掃碼添加小助手微信,回復:1,入群獲取Python電子書(附代碼~~)

Python全棧工程師學習筆記 | Django的快速入門 科技 第1張

推薦閱讀:

Python全棧工程師學習筆記 | Django的快速入門 科技 第2張

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!