Python MTV(MVC)
M: model 模型層
操作數據庫
T: template 模板層
顯示數據庫
V: view 控制層
接收用戶請求,響應請求
MTV步驟
打開pycharm創建一個Django項目
(
根據python版本切換django版本
控制檯輸入:pip install django==版本號
)
1.先創建一個app
控制檯輸入:python manage.py startapp 名字
也可以通過Tools中的 Run manage.py Task 打開命令行進行輸入
2.在settings裏邊註冊app
將創建的app名寫入INSTALLED_APPS=[]
3.在控制層views中寫一個視圖
#如何寫視圖
#1.定義視圖函數,在視圖函數中必須定義一個request對象
# 用來接收客戶端請求,且形參第一個必須是request
#2.創建響應對象 HttpResponse 先導入HttpResponse包
#3.返回響應對象
#4.創建完一個視圖函數一定要去urls.py中註冊
def index(request):
print('index')
msg = 'Hello Django'
response = HttpResponse(f'<h1>{msg}<h1>')
return response
4.在urls.py文件中註冊
#瀏覽器地址欄的url映射到視圖函數
#先將app中的views導入
from demo01 import views
urlpatterns = [
url('admin/', admin.site.urls),
url('index/',views.index)#路徑名最好和函數名相同
#第一個是瀏覽器的輸入路徑,第二個,視圖函數名
]
5.啓動調試程序
6.返回一個html文件的內容(創建模板)
步驟:
#1.創建一個視圖函數 使用render函數 app創建時在views中已經導好了render包
# 在urls.py註冊視圖函數
# url('temp/',views.temp)
#2.在templates中創建一個和視圖函數命名相同的html文件
def temp(request):
pass
return render(request,'templates中創建的html文件名')
7.html使用靜態文件(主要是一些css,js,img文件)無數據交互
#1.根目錄創建一個static文件夾,下邊可以創建類似於h5的資源文件夾(js,css,img)
#2.在settings文件中註冊該文件夾(一般寫在根目錄settings文件最後處)
# 2.1 聲明常量 STATICFILES_DIRS (名字別改)
# 值是元組或者列表 元素可以是相對路徑也可以是絕對路徑(最好是相對路徑)部署時可以使用絕對路徑
# 如果文件需要移植就寫相對路徑,一般採用路徑拼接
# 2.2 STATICFILES_DIRS =(os.path.join(BASE_DIR,'static'),) 因是元組 後邊的逗號不能省
#3.轉入第6步的過程
#4.在html文件中使用導入時用/static/需要引入的文件的名稱
# <link href='/static/css/common.css' rel ='stylesheet' type ='text/css'>
注意:靜態文件的加載是兩步完成的,html文件內容通過字符串的格式返回給模板進行渲染,當編譯靜態文件那一行時,會再次請求服務器加載該靜態文件內容,並不是說該文件的內容已經在html文件的內容中了,所以這裏會有兩次請求
8.html使用動態文件 (有數據的交互,類似於ajax+dom 的操作,結合數據庫,使用模板語法)
#1.修改數據庫配置,在根目錄下的settings.py文件中找到DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #該處的數據庫看要求切換。這裏使用mysql
'NAME': 'test', #數據庫名
'HOST':'127.0.0.1', #數據庫ip地址
'PORT':'3306', #數據庫端口
'USER':'root', #數據庫賬戶名
'PASSWORD':'root', #數據庫密碼
'CHARSET':'utf8', #數據庫內容編碼格式
}
}
#2.在數據庫中創建一個庫,庫名與settings.py中設置的保持一致
#3.在pycharm中安裝數據庫的驅動 pip install pymysql
# 並在Django中初始化pymysql(根目錄的__init__.py文件中)
import pymysql
pymysql.install_as_MySQLdb()
#4.在app文件下的models.py文件中定義模型
# 寫一個類繼承models.Model並定義屬性(對應數據庫中的列名)
#
class User(models.Model):
user_id = model.AutoField(primary_key=True)
username = model.CharField(max_length=64)
password = model.CharField(max_length=64)
#5. 在數據庫中創建表,打開控制檯,輸入下邊的代碼
python manage.py makemigrations app名稱 #生成遷移文件
python manage.py migrate app名稱
#默認的表名是 app名稱_模型函數名(小寫)
#修改默認表名方法:
class Meta:
db_table = '表名'
#注意:每次改動或者重命名後都要重新執行上邊的兩行代碼
#放在模型類下邊即可
#之後在數據庫中往該表中插入若干數據
#6. 先將.models模塊中的創建的User類導入 from .models import User
# 接着轉入第6步 先創建視圖函數 並在urls.py中註冊,
# 動態文件重要使用render函數的第三個參數,context 是個字典對象 這就是面向對象操作數據庫
def test_db(request):
users = User.objects.all() # == SELECT * FROM user
return render(request,'templates中創建的html文件名',context ={'users':users})
#7. 轉入第7步 在根目錄下創建static文件,放入需要引用的靜態文件資源並在根目錄下的settings.py文件中註冊
#8.在templates中創建一個和視圖函數相同名字的html文件
#9.在html界面中使用用模板語法,動態的給元素賦值
<table>
<tr>
<th>ID</th>
<th>用戶名</th>
<th>密碼</th>
</tr>
{% for user in users %}
<tr>
<td>{{ user.user_id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
</table>