Python篇-Django框架詳解
標簽: Django
一 : 科普一分鐘
Django
這個Web框架學習過的人無不知曉它的強大.Django
是一個開放源代碼的Web應用框架,由Python寫成,采用了MT'V的框架模式.即Model
,View
,Template
組成.許多成功的網站
和APP
都基于Django
.說到底,其實Django
內部就是對 Socket
連接的強大封裝.
Django.jpg
二:Django配置和創建
-
創建
在這里我們不用命令,用PyCharm
簡單的創建一個Django
程序
1 . 創建Django
打開PyCharm
- > File
->NewProject
進行創建
創建項目.png
-
運行
Django
程序 瀏覽器訪問http://127.0.0.1:8000/
表示連接成功了!http://127.0.0.1:8000/.png
-
創建APP
每個APP 相當于 項目中單獨的功能模塊,有著自己獨立的邏輯和數據,是項目的基本組成.
命令行創建APP,在PyCharm
->Terminal
中python3 manage.py startapp TZmyApp
完成創建APP
-
配置
1. 配置靜態文件
對于靜態文件,也就是 我們Templates
存放html
文件視圖所對應相關的JS
,CSS
,圖片
存放的對方 通常我們在 程序目錄下建立一個文件夾->static
(這里寫死就可以了,不要換別的名字)
在settings.py
文件下添加如下配置,意思是在視圖對應的靜態文件會自動在static
目錄下檢索
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
2. 配置模板文件
要是我們Templates
存放的文件生效,需要如下配置,意思是模板文件在templates
文件夾下進行檢索
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),)
三:Django結構分析
-
Django
程序Django
- 對整個程序進行配置settings
- 配置文件usls
- url對應關系 對應邏輯函數 為每個邏輯函數 分配相應視圖wsgi
- 遵循WSIG規范, uwsgi + nginxmanage.py
- #管理Django 程序 -
APP
migrations
數據庫操作記錄->相應表結構發生變化,比如說字段類型,并不是增刪改成的變動admin
Django 為我們提供的后臺管理apps
配置當前APPmodels
ORM,寫指定的類通過命令可以創建數據庫結構.tests
單元測試Views
業務邏輯代碼
四:Django原理講解
-
業務流程原理
url請求---->訪問路由系統(負責分發請求到相應視圖函數)------>視圖函數(處理請求)------>DataBase(數據庫操作數據生成對應頁面返回給用戶)
-
底層實現原理
本質是Django
就是一個Socket
服務端,用戶的瀏覽器其實就是一個Socket
客戶端.用戶訪問網站的過程就是服務端與客戶端Socket
通信的過程
# Author:TianTianBaby
import socket
def handle_request(client):
buf = client.recv(1024)
client.send("HTTP/1.1 200 OK\r\n\r\n".encode())
f = open('index.html', 'rb')
data = f.read()
client.send(data)
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8000))
sock.listen(5)
while True:
connection, address = sock.accept()
handle_request(connection)
connection.close()
if __name__ == '__main__':
main()
五:Django登錄實現
- 在自己建立的APP 里的
Views
中添加邏輯函數login
render
這個模塊相當于一個open
讀取html
文件中的數據返回給瀏覽器
from django.shortcuts import render,redirect
def login(request):
# request 包含用戶提交的所有信息
error_msg = ""
if request.method == 'POST':
# 獲取用戶通過post 提交過來的數據
user = request.POST.get('user',None)
pwd = request.POST.get('pwd',None)
if user == 'admin' and pwd == "admin":
#跳轉到響應頁面 ("/"相當于前面的地址127.1.0.0:8000)
return redirect('/home')
else:
#用戶名密碼不匹配
error_msg = "錯了 !!!!天啊!!"
//error_msg 替換html文件 相同字段文字
return render(request, 'login.html',{'error_msg':error_msg})
2.登錄函數邏輯所對應的 templates
文件中的login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<style>
label{
width: 80px;
text-align: right;
display: inline-block;
}
</style>
</head>
<body>
<form action="/login/" method="post" style="background-color: cadetblue">
<p>
<label for="username">用戶名</label>
<input id="username" name="user" type="text"/>
</p>
<p>
<label for="password">密碼</label>
<input id="password" name="pwd" type="text"/>
<input type="submit" value="提交">
//error_msg 替換請求 相同字段文字
<span style="color: red">{{ error_msg}}</span>
</p>
</form>
</body>
</html>
-
示例
效果展示.gif
- 頁面數據的操作功能
同樣的在自己建立的APP 里的Views
中添加邏輯函數home
USER_LIST = []
#
# for index in range(20):
# tem = {'username':'雪芙'+str(index),'sex':'女','age':20+index}
# USER_LIST.append(tem)
def home(request):
if request.method == 'POST':
#獲取用戶提交的數據 POST 請求中
u = request.POST.get('username')
s = request.POST.get('sex')
a = request.POST.get('age')
tem = {'username': u, 'sex': s, 'age':a}
USER_LIST.append(tem)
//當首次沒有數據時候,列表為空
return render(request,'home.html',{'user_list':USER_LIST})
- home函數邏輯所對應的
templates
文件中的home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home</title>
</head>
<body style="margin: 0">
<div style="height:48px;background-color: cadetblue"></div>
<div>
<form action="/home/" method="post">
<input type="text" name="username" placeholder="用戶名"/>
<input type="text" name="sex" placeholder="性別"/>
<input type="text" name="age" placeholder="年齡"/>
<input type="submit" value="添加">
</form>
</div>
<div>
<table>
//頁面中的for循環寫法
{% for row in user_list %}
<tr>
<td>{{ row.username }}</td>
<td>{{ row.sex }}</td>
<td>{{ row.age }}</td>
</tr>
{% endfor %}
</table>
</div>
</body>
</html>
-
示例
循環操作.gif
六:總結
Django
的主要目的是簡便、快速的開發數據庫驅動的網站,Django
有許多功能強大的第三方,本質是上是一個服務端的Socket
連接,但是功能及其強大,封裝后的功能簡單易操作,深受廣大用戶喜愛.配合上模板頁面,數據處理,就可以建立自己的網站或者移動應用程序.
其他參考:https://www.cnblogs.com/zenghui-python/p/10800165.html
django進階一:https://www.jianshu.com/p/0e889b5ee95c
django進階二:https://www.jianshu.com/p/437e2a437ff8
智能推薦
Python Django框架學習05:Django 模板
在上一章節中我們使用 django.http.HttpResponse() 來輸出 "Hello World!"。該方式將數據與視圖混合在一起,不符合 Django 的 MVC 思想。 本章節我們將為大家詳細介紹 Django 模板的應用,模板是一個文本,用于分離文檔的表現形式和內容。 模板應用實例 我們接著上一章節的項目將在 HelloWorld 目錄底下創建 templat...
Python Django框架學習09:Django 路由
路由簡單的來說就是根據用戶請求的 URL 鏈接來判斷對應的處理程序,并返回處理結果,也就是 URL 與 Django 的視圖建立映射關系。 Django 路由在 urls.py 配置,urls.py 中的每一條配置對應相應的處理方法。 Django 不同版本 urls.py 配置有點不一樣: Django1.1.x 版本 url() 方法:普通路徑和正則路徑均可使用,需要自己手動添加正則首位限制符...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
猜你喜歡
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...