View視圖
用戶相關之功能
程式碼
‘url(login/‘)->login功能 →template(login.html)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29def login(request):
postform = PostForm(request.POST)
if request.method == 'POST':
if postform.is_valid(): #forms驗證通過
name = request.POST['username']
password = request.POST['password']
user = authenticate(username=name, password=password)
if user is not None:
if user.is_active:
auth.login(request,user)
message = '登入成功!'
return redirect('/login1/')
else:
message = '帳號尚未啟用!'
else:
message = '登入失敗!'
else:message = "請輸入驗證碼"
if request.user.is_authenticated:
message = "已經登入"
return redirect('/login1/')
if request.method == 'POST':
return redirect('/login1/')
return render(request, "login.html", locals())1
path('login/', views.login),
功能logout
1
2
3def logout(request):
auth.logout(request)
return redirect('/login/')功能 增加新用戶
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24def addtest(request):
if request.method == 'POST':
name = request.POST['username']
password = request.POST['password']
email = request.POST["email"]
first_name = request.POST["first_name"]
last_name = request.POST["last_name"]
try:
user=User.objects.get(username=name)
except :
user = None
if user!=None:
message = name + "帳號已存在"
else:
user=User.objects.create_user(name,email,password)
user.first_name = first_name
user.last_name = last_name
user.is_staff=False # 工作人員狀態
user.save()
return redirect('/login/')
else:
message = "請輸入註冊資訊"
return render(request,'adduser.html',locals())
URL(/login1/)→商品首頁→’producer.html’ (包含 查詢 分類 分頁器
1 | if request.method == "POST" and post_form.is_valid(): |
根據form POST之內容,對model類進行資料庫鍵值查詢
1 | paginator = Paginator(student,4) |
可自訂一頁顯示多少資料 Paginator(student,4) 對於model students 可以顯示四筆data在分頁
購物車內容實現方式 (COOKIES) ^ 做(新增檢視刪除)
程式碼如下
設定COOKIES == 新增購物車商品數量
1
2
3
4
5
6
7
8
9
10
11
12
13
14productID = pk
if(productID):
prev_url = request.META['HTTP_REFERER']
response = redirect(prev_url )
goods_count = request.COOKIES.get(productID)
if(goods_count):
goods_count = int(goods_count)+1
else :
goods_count = 1
response.set_cookie(productID,goods_count)
return response取得primaryKey → 設定COOKIE(key,val) =((productID,goods_count)) = (商品主鍵ID,商品數量)
1
path("cart/add/<pk>",views.addCart ,name ="addcart" ),
primaryKey從url.py當中去接收,
通過在templates 中取得顯示商品之主鍵值 ,可獲取從其他funtion傳入templates之鍵值
1
2{%url 'addcart s.pk'} ->取得url.py中name == 'addcart'的網址 s.pk為product表中PK
檢視購物車頁面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25def showCart(request):
cart_goods_list = []
cart_goods_count = 0
cart_goods_money = 0
'''顯示購物車頁面'''
for productionID , productionNum in request.COOKIES.items():
#判斷ID是否為數字 ->確定是否為商品的COOKIES
if not productionID.isdigit():
continue
cart_goods = product.objects.get(productID = productionID)
cart_goods.Num = productionNum #數量(單)
aGoodTotalPrice = int(productionNum)* int(cart_goods.productPrice)
cart_goods.total = aGoodTotalPrice #總金額(單)
cart_goods_list.append(cart_goods)#把cookie相等的商品加入列表
#總數量和金額 (全)
cart_goods_count += int(productionNum)
cart_goods_money += aGoodTotalPrice
return render(request , 'cartPage.html' , locals())主要是取得COOKIES的值,此值可作為get model的condition
移除購物車商品
1
2
3
4
5
6
7
8
9
10
11
12
13def removeCart(request , pk = None):
productID = pk
if (productID ) :
prev_url = request.META['HTTP_REFERER']
response = redirect(prev_url)
#取得上一頁url
productCount = request.COOKIES.get(productID,'')
#藉由是否獲取到cookies值,判別商品存在購物車
if productCount:
response.delete_cookie(productID)
return response1
prev_url = request.META['HTTP_REFERER'] # 可以取的上頁網址
原理是直接對COOKIES做remove的動作,進而改變SHOW之值
訂單功能實現
提交訂單
1 |
|
遍歷COOKIES的值 ,得到的對象存入列表方便templates取用
根據提交之表單傳送資訊
主要執行將Cookies存入資料表當中之工作
1 |
|
成功之後會跳進此頁面,根據訂單編號,檢視不同訂單之資訊
1 |
|
根據登入使用者帳號,返回使用者的訂單
1 | f searchUserOrder(request): |