1.準備工作
開發環境:
python: 3.7.3 下載地址:www.python.org/downloads/
pip: pip3
Django: 2.2 下載地址: www.djangoproject.com/download/
PyCharm: 2017.2 下載地址:www.jetbrains.com/pycharm/dow…
2.基礎知識
1.Python: Python發源於八十年代後期。開發者是Centrum Wiskunde & Informatica的Guido van Rossum,這是位於荷蘭阿姆斯特丹科學園區的一個數學和電腦科學研究中心。之後Van Rossum一直是Python開發很有影響的人物。事實上,社群成員給了他一個榮譽稱號:終生仁慈獨裁者(BDFL)。
2.web框架介紹 web框架的概念就像建房子,地基、支撐柱、大梁的骨架還有其他沙石、地板等等材料已經有了, 剩下的就是靠你自己組裝起來。猶如積木一樣。
說明:圖片來源百度。
Django: Python代表性web框架, 遵循MMVC架構模式的開源框架。 它的名字來自Django Reinhardt,一個法國作曲家和吉他演奏家,很多人認為他是歷史上最偉大的吉他演奏家。位於堪薩斯洲的Lawrence城的Lawrence Journal-World報社有兩位程式設計師,Adrian Holovaty和Simon Willison,他們在2003的時候開發出了Django,用於給報紙開發web程式。
其他框架:tornado、flask、webpy
3.例項
Python的和Pycharm的安裝忽略,安裝比較簡單。
1.安裝
Mac終端下:
$ pip3 install django # 或 pip3 install django==2.2
複製程式碼
Windows是在cmd裡面,命令相同。
2.建立專案
開啟Pycharm,歡迎頁create project,然後
PS:建立專案也可以使用命令這裡不做介紹.
django-admin createproject DjangoQuick
django-admin startapp quick
複製程式碼
3.專案結構
4.啟動專案
Pycharm選單欄
直接點選執行。或者左下角Terminal輸入
python3 manage.py runserver
將會在瀏覽器看到
這樣表示專案已經啟動成功,但是我們沒有編寫任何程式碼,所以出現了預設的錯誤提示。
5.新增檢視
開啟quick目錄下的views.py,輸入一下內容
from django.shortcuts import render
from django.http import HttpResponse # 新新增
# Create your views here.
# 新新增
def index(request):
return HttpResponse('success')
複製程式碼
6.新增url
開啟DjangoQuick下的urls.py,修改如下:
from django.contrib import admin
from django.urls import path
from quick.views import index # 匯入包
urlpatterns = [
path('admin/', admin.site.urls),
path('', index) # 新增新的對映關係
]
複製程式碼
如果使用Pycharm的按鈕啟動專案,需要點選stop,重新執行,如果在terminal中執行專案,會自動重啟。
然後重新整理瀏覽器。
然後就會看到我們在views.py的index方法中的輸出。
7.返回Html(模版)
在quick目錄新建templates目錄
然後右鍵-new-html file, 新建一個index.html檔案
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
這是一個html from:https://litets.com
</body>
</html>
複製程式碼
修改views.py檔案
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
複製程式碼
重啟伺服器,重新整理瀏覽器將會看到
這是一個html from:https://litets.com
複製程式碼
8.靜態檔案
上面我們已經成功輸出了一段html程式碼,並且成功展示。大家都知html的美化需要依靠css,
css寫法有兩種:內聯式和外聯式。內聯就不用多說,直接寫在html同檔案裡面就可以了,現在我們使用外聯檔案改怎麼辦呢?
在quick目錄下新建static/css/style.css檔案。
.desc {
color: red;
}
複製程式碼
然後修改index.html
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<div class="desc">
這是一個html from:https://litets.com
</div>
</body>
</html>
複製程式碼
重新整理瀏覽器,將會看到字變成紅色了。
9.接收使用者資料,處理後返回
修改index.html檔案
<div class="desc">
這是一個html from:https://litets.com
</div>
<!--一下是新新增-->
<form action="/" method="post">
{% csrf_token %}
使用者名稱: <input type="text" name="username" placeholder="請輸入使用者名稱"> <br>
密碼: <input type="password" name="password" placeholder="請輸入密碼"> <br>
<input type="submit" value="提交">
</form>
<!--users來自view中的context-->
{% if users %}
<table border="1px">
<tr>
<td>序號</td>
<td>使用者名稱</td>
<td>密碼</td>
</tr>
{% for user in users %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
</table>
{% endif %}
複製程式碼
views.py修改
from django.shortcuts import render
def index(request):
# 判斷是否是post請求
if request.method == 'POST':
# 獲取到請求引數, username的寫法,如果username不存在不會拋異常
# password 會拋異常
username = request.POST.get('username')
password = request.POST['password']
# 業務 需求:
users = []
for x in range(0,3):
users.append(
{'username': '%s-%d' % (username, x), 'password': '%s-%d' % (password, x)}
)
# 返回給使用者 模版中使用到的users就是這裡傳遞進去的
return render(request, template_name='index.html', context={
'users': users
})
return render(request, 'index.html')
複製程式碼
這樣我們就實現了一個基本的網站了,但是有一個問題,使用者傳遞過來的資料只是單次有效,無法持久化。
通常一個網站應用到需要持久化資料,比如檔案、資料庫等。
10.資料庫持久化資料
我們開啟DjangoQuick目錄下的setting.py找到DATEBASES
預設專案使用sqlite3最為資料庫。還支援 MySQL, PostgreSQL等
可用的引擎有:
'django.db.backends.sqlite3'
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.oracle'
複製程式碼
Mysql的設定:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', # 資料庫名稱,
'HOST': 'localhost', # 主機地址
'USER': 'user', # 資料庫使用者
'PASSWORD': 'pwd', # 密碼
'PORT': 3306 # mysql的埠預設3306
}
}
複製程式碼
這裡我們使用預設的sqlite3。
開啟quick下的models.py
from django.db import models
class User(models.Model):
username = models.CharField(max_length=25)
password = models.CharField(max_length=18)
複製程式碼
我們增加了兩個欄位username和password,Django預設支援orm。
同步資料庫,在終端中執行
$ python3 manage.py makemigrations
複製程式碼
此命令執行完成後,會在migrations下生產記錄models變動的記錄。
此時資料庫並未變動,然後執行
$ python3 manage.py migrate
複製程式碼
這樣models的變動,立即同步到資料庫中。
修改views.py
from django.shortcuts import render
from .models import User
def index(request):
# 判斷是否是post請求
if request.method == 'POST':
# 獲取到請求引數, username的寫法,如果username不存在不會拋異常
# password 會拋異常
username = request.POST.get('username')
password = request.POST['password']
u = User(username=username, password=password)
u.save()
# 業務 需求:查詢出所有資料
users = User.objects.all()
# 返回給使用者
return render(request, template_name='index.html', context={
'users': users
})
複製程式碼
這樣新增使用者後就會持久報錯了,即使關閉瀏覽器,重新訪問資料也是存在的。
我們檢視db.sqlite3檔案檢視裡面的資料