Django入門
前幾天看了Python的一些基礎知識,然後又瞭解了一下相關的web框架,比較主流的有Django和Flask,比較了一下之後決定學Django,基礎供能比較完善,對於初學者應該更友好一些。一邊跟著大神的部落格做,一邊整理了這篇部落格,沒什麼新的東西,只是我個人的學習筆記,其中一些部分我專門修改成不太一樣的東西,以免學習過程中不求甚解的忽略。總的來說大神這篇部落格非常不錯,如果你是剛學習了Python的基礎語法,想要試著做點什麼,那麼就跟著下面的參考資料中,大神的部落格過一遍吧,很有趣很簡單,就能擼一個網站的demo了。
參考資料Leo_wlCnBlogs
在此由衷感謝作者的分享。
安裝PyCharm
直接搜尋PyCharm下載安裝Windows專業版,這裡有專業版註冊碼。
建立project
安裝完成之後會提示建立新的project,裡邊就能夠直接選擇建立Django專案,點選之後如果你沒有Django會自動安裝,這裡要掛VPN。下載之後選擇目錄,就會自動建立目錄了。直接執行,就能夠看到第一個頁面。
這時候還沒有myapp資料夾和static資料夾,經過下邊的步驟才有。
建立APP
完成上邊的步驟之後,雖然能執行伺服器了,但是還不能顯示我們所需要的內容。接下來建立app。在pycharm下方的terminal終端中輸入命令:python manage.py startapp myapp
這樣就建立了一個叫做myapp的APP,django自動生成“myapp”資料夾。
然後把我們新定義的app加到settings.py中的INSTALL_APPS中。
編寫路由
路由都在urls檔案中,首先匯入隊形的app的views檔案from myapp import views
然後在urlpatterns之中加上url對映url(r'^index/', view.index),
這樣,使用者在瀏覽器中輸入的url就會對映到相應的業務處理邏輯上了。
編寫業務處理邏輯
業務處理邏輯在views.py檔案中。
from django.shortcuts import HttpResponse
def index(request):
# request.POST
# request.GET
return HttpResponse('hello world!')
通過編寫路由和業務處理邏輯,我們將index這個url指向了views裡的index()函式,它接收使用者請求,並返回一個hello world 字串。
執行web服務
命令列執行方式:python manage.py runserver 127.0.0.1:8000
在pycharm中,可以直接按按綠色小三角的按鍵來執行。成功之後下方還會顯示連線,點選即可開啟相應的頁面。
如果有錯誤,Django會在頁面中詳細顯示錯誤內容。根據上邊的步驟開啟,會發現出現 404錯誤,這是因為我們指定的是index頁面,只要在url後邊加上index即可。
返回HTML檔案
首先寫一個index.html
然後修改一下views檔案:
1.首先pycharm一般會自動幫你匯入Django的render模組。沒有的話要記得加上
2.然後把之前的index函式改為:
def index(request):
# request.POST
# request.GET
#return HttpResponse('hello world!')
#下邊的引數request是固定的,第二個引數是指定的檔案,即index.html
return render(request,'index.html')
當你想返回一個html檔案時,就要使用render方法來渲染(其實就是打包的意思)。render是Django提供的方法和規則,直接使用即可。
為了讓Django知道我們的html檔案在哪裡,需要修改settings檔案的相應內容。但是由於是Django給我們建立的工程目錄,所以預設情況下它知道我們的html就放在template這個資料夾下邊,我們無需修改。
頻繁重啟時,由於埠為釋放的原因,可能會啟動不了服務,修改下埠就OK了。
使用靜態檔案
現在我們已經能夠返回html了,但是肯定不能少了css和js,這樣前端才算完整。在Django中,一般將靜態檔案放在static目錄中,這裡就自己來建立一個static目錄。然後在目錄下放置css和js。
為了讓Django找到這個目錄,依然需要對settings進行配置。尤其這個static目錄是我們自己建立的Django還不知道它是幹嘛的。開啟之後揮發新啊在settings檔案的底部,Django已經為我們預留了位置,直接設定即可。
按照上圖進行設定之後,就可以在html中引入js和css了。
重啟重新整理即可看到結果。
接受使用者傳送的資料
接下來就要讓web伺服器和使用者之間進行互動了。我們在html中設計一個表單,讓使用者輸入資訊,再提交給index這個url,伺服器將收到這些資料:
1.修改html,加個表單:
<h1>input your massage:</h1>
<form action="/index/" method="post">
<input type="text" name="name" placeholder="input your name">
<input type="text" name="age" placeholder="input your age">
<input type="submit" value="submit">
</form>
2.修改views.py檔案,業務邏輯index函式:
def index(request):
if request.method == 'POST':
name = request.POST.get('name',None)
age = request.POST.get('age',None)
print(name,age)
return render(request,'index.html',)
3.此事直接使用會出錯,因為Django有一個跨站請求保護的安全機制,我們在settings檔案中把下列語句註釋掉:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
接下來就能正常工作了,在瀏覽器中輸入提交之後,我們能在pycharm中看到相應的資料。
返回動態頁面
上一節我們能收到使用者資料了,但是返回給使用者的還是靜態頁面。一般來說,我們收到資料之後會在後臺進行處理,之後再返回給使用者。
這時候Django採用jinja2語言編寫動態模板,jinja2會根據提供的資料,替換掉html中的相應部分。
模板引擎:模板引擎分為前端模板引擎和後端模板引擎,其區別在於是否在瀏覽器上渲染模板、填充資料。vue,react,angularjs等mvvm框架也自帶模板輸出模組,他們也屬於前端模板引擎。
另外,除了mvvm前端框架自帶的模板輸出模組在瀏覽器跑之外,其他前端js模板引擎大多數都是基於nodejs伺服器執行的,所以,js模板引擎!= 前端模板引擎(部分模板引擎可以在瀏覽器跑)。
進一步瞭解可以看看這篇部落格
jinjia2語言來寫模板的語法可以在這裡學習
詳細語法入門後再深入學習。
接下來,改造views.py檔案:
user_list = [
{'user':'Jack','age':'16'},
{'user':'Tom','age':'20'},
{'user':'Alex','age':'26'}
]
def index(request):
if request.method == 'POST':
name = request.POST.get('name',None)
age = request.POST.get('age',None)
temp = {'name':name,'age':age}
user_list.append(temp)
return render(request,'index.html',{'data':user_list})
然後改造index.html檔案,插入jinjia2模板語法:
<h1>user list</h1>
<table>
<tr>
<th>name</th>
<th>age</th>
</tr>
// jinjia2模板語法的迴圈和插值
{% for line in data %}
<tr>
<td>{{ line.name }}</td>
<td>{{ line.age }}</td>
</tr>
{% endfor %}
</table>
使用資料庫
上邊已經實現了跟使用者的輸入輸出,就剩在資料庫裡邊儲存資料了。Django通過自帶的ORM框架運算元據庫,並且自帶輕量級的SQLite資料庫。接下來操作試試:
1.在settings檔案中註冊app:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#在這裡加入你建立的app資料夾名
'myapp'
]
不註冊它,你的資料庫就不知道給哪個app建立表。
2.在settings中,配置資料庫相關的引數,如果使用自帶的SQLite,則不需要修改:
DATABASES = {
'default': {
# 在這裡指定使用的資料庫型別,這裡指定了Django自帶的輕量資料庫SQLite3,初學直接用它就好了,這裡就不改了。
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
3.編輯models.py檔案,也就是MTV中的M:
# 這邊要繼承這個models.Model類,固定寫法
class UserInfo(models.Model):
#建立2個欄位,最大長度32,型別是char
name = models.CharField(max_length=32)
age = models.CharField(max_length=32)
我們建立了兩個欄位分別儲存名字和年齡。
4.在pycharm的teminal中通過命令建立資料庫的表。這裡需要2條命令:
python manage.py makemigrations
輸入之後會在app中的migrations資料夾中建立一個新檔案。、
再輸入:
python manage.py migrate
來同步資料庫,之後會出來一大堆OK。
5.修改views.py中的業務邏輯:
def index(request):
if request.method == 'POST':
name = request.POST.get('name',None)
age = request.POST.get('age',None)
# 新增資料到資料庫
models.UserInfo.objects.create(name=name,age=age)
# 從資料庫中讀取所有資料
user_list = models.UserInfo.objects.all()
return render(request,'index.html',{'data':user_list})
重啟web伺服器,重新整理頁面之後,就能跟使用者進行資料互動了,在上邊書寫提交,然後在下邊顯示出來。
至此一個簡單的Django專案就完成了。
Django總結
跟著大神的思路走了一遍之後,發現Django確實是一個非常棒的框架,功能強大,常用的東西都幫你整合好了,作為初學者,沒有什麼大坑,一步步認真跟過來就能完成了。
最後,大神的建議我深以為然:學習新東西的時候,不要一開始就扎入細節,先對整理有個認識,瞭解知識框架,再學習基本內容,最後再深入。之前看了Python的語法,看了挺久的,也寫不出什麼東西,今天跟著這個部落格走了一遍, 一個簡單的demo就出來了。接下來我只要在它的基礎上修修補補,增加功能,就能完成簡單的網站了,在過程中,遇到哪裡不懂的,再去搜尋學習,解決問題,我覺得這樣的學習方式效果好,而且不枯燥,很有成就感。
相關文章
- Django 入門介紹Django
- Django REST framework完全入門DjangoRESTFramework
- Django+MySQL 例項入門DjangoMySql
- Python系列之-1、Django入門PythonDjango
- Django新手圖文入門教程Django
- Django-APP及專案入門DjangoAPP
- Python學習之路17-Django入門PythonDjango
- Django入門案例:圖書管理系統Django
- 《Django入門與實踐教程》完整版Django
- Django 自定義管理命令:從入門到高階Django
- 小入門 Django(做個疫情資料包告)Django
- Python Django框架是什麼?Python學習入門!PythonDjango框架
- django基礎入門之搭建部落格系統Django
- Django測試與持續整合:從入門到精通Django
- Django入門指南-第1部分(環境搭建)Django
- python基礎 之 Django框架建立專案的方法入門PythonDjango框架
- 好程式設計師Python培訓分享基礎入門Django程式設計師PythonDjango
- 一篇文章入門django開發 (測試平臺)Django
- 分享兩個不錯的django免費入門學習資源Django
- Django入門到進階-適合Python小白的系統課程DjangoPython
- Python+django網頁設計入門(17):模板語法及應用PythonDjango網頁
- Python+django網頁設計入門(15):公用模板設計與使用PythonDjango網頁
- Python+django網頁設計入門(18):自定義模板過濾器PythonDjango網頁過濾器
- 入門入門入門 MySQL命名行MySql
- Django 從啟動到請求到響應全過程分析-入門版Django
- 何入CTF的“門”?——所謂入門就是入門
- 如何入CTF的“門”?——所謂入門就是入門
- scala 從入門到入門+
- makefile從入門到入門
- gRPC(二)入門:Protobuf入門RPC
- Python+django網頁設計入門(20):使用WebSocket建立多人線上聊天室PythonDjango網頁Web
- PyCharm入門第一步(四):建立和執行第一個Django專案PyCharmDjango
- 第一部分 入門|第一章 Django Python實戰DjangoPython
- 【小入門】react極簡入門React
- Android入門教程 | RecyclerView使用入門AndroidView
- Python+django網頁設計入門(16):優化設計複用分頁程式碼PythonDjango網頁優化
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | Kotlin協程入門AndroidKotlin