本文 pdf 下載連結
基礎部分須知:1.HttpResponse 返回字符串2.Render 返回一個Html文件3.Redirect 重定向
創建Django項目
創建apps
在這裡插入圖片描述一、簡單配路由二、接收url的參數三、url正則表達式傳參在這裡插入圖片描述四、表單提交(GET、POST、頁面跳轉)上面介紹的都屬於 FBV 就是function 通過函數處理
下面介紹 CBV 就是 class 通過類
五、登錄案例:#綜合案例部分這個案例是一個管理系統:有學生表、班級表、教師表,班級與教師的關係表,對上面四張表進行操作,完成前端網頁和後端處理,通過本案例熟悉Django項目的編程。
內容的html部分,界面不是很好看,不過這不是重點,主要了解操作過程就好了。
一、班級表的操作第一節:讀取class表的數據,在界面顯示文件目錄:
url路由:
from apps import views
urlpatterns = [
path('admin/', admin.site.urls),
path("classes/",views.classes),
]Class.html代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班級列表</title>
</head>
<body>
<h1>班級列表</h1>
<div><a href="/class_add/">添加</a></div>
<table border="1">
<thead>
<th>ID</th>
<th>班級名稱</th>
<th>操作</th>
</thead>
<tbody>
{% for row in result %}
<tr>
<td>{{ row.id }}</td>
<td>{{ row.title }}</td>
<td>
<a>編輯</a>|
<a>刪除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>Views.py
from django.shortcuts import render,HttpResponse,redirect
from django.views.generic import View
import pymysql
def classes(request):
conn=pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password="123456",
database="classes",
charset="utf8"
)
cursor = conn.cursor() # 出現前端網頁拿不到數據,因為元組傳不過去
# cursor = conn.cursor(pymysql.cursors.DictCursor)
sql="select * from class"
cursor.execute(sql,())
result=cursor.fetchall()
print(result)
return render(request,"classes.html",{"result":result})
在這裡插入圖片描述1.使用cursor = conn.cursor(pymysql.cursors.DictCursor)代碼result裡面的數據:字典頁面顯示:
2.cursor = conn.cursor() # 出現前端網頁拿不到數據,因為元組傳不過去Result裡面的結果:元組頁面顯示:
在這裡插入圖片描述第二節:添加班級1.創建資料庫幫助類:因為資料庫操作要用的地方比較多,所以創建一個工具包utils,在裡面創建一個sqlhelper.py的資料庫工具文件。
在這裡插入圖片描述Sqlhelper.py
import pymysql
class SqlHelper():
def __init__(self):
self.connet()
def connet(self):
self.conn=pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password="123456",
database="classes",
charset="utf8")
self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
def get_list(self,sql,args):
self.cursor.execute(sql, args)
result = self.cursor.fetchall()
return result
def close(self):
self.cursor()
self.conn.close()使用工具類:
from apps.utils.sqlhelper import SqlHelper # 導入資料庫幫助類
def classes(request):
obj=SqlHelper()
sql = "select * from class"
result = obj.get_list(sql,())
obj.close()
return render(request,"classes.html",{"result":result})使用上面代碼的效果和原來是一樣的。
2.添加班級:Calss_add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加班級</title>
</head>
<body>
<h1>添加班級</h1>
<form method="post" action="/class_add/">
<p><input type="text" name="title" placeholder="班級名稱"></p>
<p><input type="submit" value="添加"></p>
</form>
</body>
</html>Views.py
def class_add(request):
if request.method=="GET":
return render(request,"class_add.html")
else:
title = request.POST.get("title")
print(title)
obj=SqlHelper()
sql="insert into class(title) values(%s)"
obj.modify(sql,title)
obj.close()
return redirect("/classes/")Sqlhelper.py
def modify(self,sql,args):
self.cursor.execute(sql,args)
self.conn.commit()
3.刪除班級:Classes.html
<a href="/class_del?cid={{ row.id }}">刪除</a>Views.py
def class_del(request):
cid = request.GET.get("cid")
sql="delete from class where id=%s"
obj = SqlHelper()
obj.modify(sql,cid)
obj.close()
return redirect("/classes/")
4.編輯班級:Classes.html
<a href =/class_edit?cid={{ row.id }}> 編輯</a>|Class_edit.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>編輯班級</title>
</head>
<body>
<form method="post" action="/class_edit/">
<p><input type="text" value="{{ id }}" name="cid" ></p>
<p><input type="text" name="title" value="{{ title }}"></p>
<p><input type="submit" value="更新"></p>
</form>
</body>
</html>Views.py
def class_edit(request):
if request.method=="GET":
cid = request.GET.get("cid")
obj = SqlHelper()
sql="select * from class where id=%s"
result = obj.get_one(sql,cid)
obj.close()
return render(request,"class_edit.html",result)
else:
cid = request.POST.get("cid")
title=request.POST.get("title")
print(cid,title)
obj=SqlHelper()
sql="update class set title=%s where id=%s"
obj.modify(sql,(title,cid))
return redirect("/classes/")sqlHelper.py
def get_one(self,sql,args):
self.cursor.execute(sql, args)
result = self.cursor.fetchone()
return result演示:
在這裡插入圖片描述第二節:分包管理1.創建app1.創建一個apps的包(原來的不要了,代碼還是需要,本來那個apps按理要設置為classes的)
2.配置路由4.將前面寫的路由地址同一加上/classes/
<a href =/classes/class_edit?cid={{ row.id }}> 編輯</a>|
<a href="/classes/class_del?cid={{ row.id }}">刪除</a>
<form method="post" action="/classes/class_add/">
等等。。。。通過上面的路由配置管理,其實是分了兩層,最外層是:和項目同名下面的urls文件裡的路由;裡層是:相應app下的,自己手動添加的urls路由文件。當前端訪問時,首先進入最外層的路由,然後根據配置分配到不同的app文件下的urls路由文件中,從而找到處理函數。
第三節:反向解析在urls.py 文件中,在進行url映射時,為請求的url命名,以便在模板頁面或者views.py視圖中可以進行反向解析,同時在修改了url映射的請求路徑,名稱不變的情況下,不再修改模板頁面或者視圖中的數據,項目不受影響正常執行! url標籤中使用模板變量和普通標籤參數一樣,空格隔開,{{% url 別名 %}}即可。
使用反向解析:
前端:
<div><a href="{% url 'classes:class_add' %}">添加</a></div>
<a href ="{% url 'classes:class_edit' %}?cid={{ row.id }}"> 編輯</a>|
<a href="{% url 'classes:class_del' %}?cid={{ row.id }}">刪除</a>
後端:
return redirect("classes:classes")
補充:使用static下面的內容配置當我們在項目下面創建一個static文件夾,裡面放置一些靜態文件,需要在setting.py裡面配置如下:
在這裡插入圖片描述<body>
<img src="/static/1.png">
</body>其他表的操作都差不多,到這裡Django基本有所了解了。
每天進步一點點!!!