import time
from django.shortcuts import render
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import HttpResponseRedirect
from django.db.models import Sum
from Buyer.models import *
from Store.views import set_password
from Store.models import *
from alipay import AliPay
def loginValid(fun):
def inner(request,*args,**kwargs):
c_user = request.COOKIES.get("username")
s_user = request.session.get("username")
if c_user and s_user and c_user == s_user:
return fun(request, *args, **kwargs)
else:
return HttpResponseRedirect("/Buyer/login/")
return inner
def register(request):
if request.method == "POST":
#获取前端post请求的数据
username = request.POST.get("user_name")
password = request.POST.get("pwd")
email = request.POST.get("email")
#将数据存入数据库
buyer = Buyer()
buyer.username = username
buyer.password = set_password(password)
buyer.email = email
buyer.save()
#跳转到login页面
return HttpResponseRedirect("/Buyer/login/")
return render(request,"buyer/register.html")
def login(request):
if request.method == "POST":
#获取数据
username = request.POST.get("username")
password = request.POST.get("pwd")
if username and password:
#判断用户是否存在
user = Buyer.objects.filter(username=username).first()
if user:
#密码加密比对
web_password = set_password(password)
if user.password == web_password:
response = HttpResponseRedirect("/Buyer/index/")
#校验的登陆
response.set_cookie("username",user.username)
request.session["username"] = user.username
#方便其他查询
response.set_cookie("user_id",user.id)
return response
return render(request,"buyer/login.html")
@loginValid
def index(request):
"""
前台首页
"""
result_list = [] #定义一个容器用来存放结果
goods_type_list = GoodsType.objects.all() #查询所有的类型
for goods_type in goods_type_list: #循环类型
goods_list = goods_type.goods_set.values()[:4] #查询前4条
if goods_list: #如果类型对应的值
goodsType = {
"id": goods_type.id,
"name": goods_type.name,
"description": goods_type.description,
"picture": goods_type.picture,
"goods_list": goods_list
} #构建输出结果
#查询类型当中有数据的数据
result_list.append(goodsType) #有数据的类型放入result_list
return render(request,"buyer/index.html",locals())
@loginValid
def goods_list(request):
"""
前台列表页
:param reuqest:
:return:
"""
goodsList = []
type_id = request.GET.get("type_id")
#获取类型
goods_type = GoodsType.objects.filter(id = type_id).first()
if goods_type:
#查询所有上架的产品
goodsList = goods_type.goods_set.filter(goods_under=1)
return render(request,"buyer/goods_list.html",locals())
def logout(request):
response = HttpResponseRedirect("/Buyer/login/")
#删除所有的请求携带的cookie
for key in request.COOKIES:
response.delete_cookie(key)
#删除session
del request.session["username"]
return response
def base(request):
return render(request,"buyer/base.html")
def goods_detail(request):
goods_id = request.GET.get("goods_id")
if goods_id:
goods = Goods.objects.filter(id = goods_id).first()
if goods:
return render(request,"buyer/detail.html",locals())
return HttpResponse("没有您指定的商品")
def setOrderId(user_id,goods_id,store_id):
"""
设置订单编号
时间+用户id+商品的id+商铺+id
"""
strtime = time.strftime("%Y%m%d%H%M%S",time.localtime())
return strtime+str(user_id)+str(goods_id)+str(store_id)
def place_order(request):
if request.method == "POST":
#post数据
count = int(request.POST.get("count"))
goods_id = request.POST.get("goods_id")
#cookie的数据
user_id = request.COOKIES.get("user_id")
#数据库的数据
goods = Goods.objects.get(id = goods_id)
store_id = goods.store_id.id
price = goods.goods_price
#保存订单
order = Order()
order.order_id = setOrderId(str(user_id),str(goods_id),str(store_id))
order.goods_count = count
order.order_user = Buyer.objects.get(id = user_id)
order.order_price = count*price
order.order_status = 1
order.save()
#订单详情
order_detail = OrderDetail()
order_detail.order_id = order
order_detail.goods_id = goods_id
order_detail.goods_name = goods.goods_name
order_detail.goods_price = goods.goods_price
order_detail.goods_number = count
order_detail.goods_total = count*goods.goods_price
order_detail.goods_store = store_id
order_detail.goods_image = goods.goods_image
order_detail.save()
detail = [order_detail]
return render(request,"buyer/place_order.html",locals())
else:
order_id = request.GET.get("order_id")
if order_id:
order = Order.objects.get(id = order_id)
detail = order.orderdetail_set.all()
return render(request,"buyer/place_order.html",locals())
else:
return HttpResponse("非法请求")
def pay_result(request):
"""
支付宝支付成功自动用get请求返回的参数
#编码
charset=utf-8
#订单号
out_trade_no=10002
#订单类型
method=alipay.trade.page.pay.return
#订单金额
total_amount=1000.00
#校验值
sign=enBOqQsaL641Ssf%2FcIpVMycJTiDaKdE8bx8tH6shBDagaNxNfKvv5iD737ElbRICu1Ox9OuwjR5J92k0x8Xr3mSFYVJG1DiQk3DBOlzIbRG1jpVbAEavrgePBJ2UfQuIlyvAY1fu%2FmdKnCaPtqJLsCFQOWGbPcPRuez4FW0lavIN3UEoNGhL%2BHsBGH5mGFBY7DYllS2kOO5FQvE3XjkD26z1pzWoeZIbz6ZgLtyjz3HRszo%2BQFQmHMX%2BM4EWmyfQD1ZFtZVdDEXhT%2Fy63OZN0%2FoZtYHIpSUF2W0FUi7qDrzfM3y%2B%2BpunFIlNvl49eVjwsiqKF51GJBhMWVXPymjM%2Fg%3D%3D&trade_no=2019072622001422161000050134&auth_app_id=2016093000628355&version=1.0&app_id=2016093000628355
#订单号
trade_no=2019072622001422161000050134
#用户的应用id
auth_app_id=2016093000628355
#版本
version=1.0
#商家的应用id
app_id=2016093000628355
#加密方式
sign_type=RSA2
#商家id
seller_id=2088102177891440
#时间
timestamp=2019-07-26
"""
return render(request,"buyer/pay_result.html",locals())
def pay_order(request):
money = request.GET.get("money") #获取订单金额
order_id = request.GET.get("order_id") #获取订单id
alipay_public_key_string = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6M7zHSmJhDrrfKt7eYapbbGhdth72wcws74vLQamlzIpCuLLTaJFUkva0fVlwAwl0l9DZotLSORKxxIORhzslOxtwGnQ+staKJUEe2AhLVu/v5jRTIuVPVFm7qgWXD/H3vNF9kL9jFCl1REvgc207xe0r1rk41cQFAodWmJEp+0pcKq6UzAi8ZNhnjbSQjOE1WbMDIb+lgXQdDlk/Bp5w2W7wNJ6oAISejruKAOvCSnbk1WRUYUDPXxbJakhqBoozrni8R5LKEQ/MJAs9ztCi3h3RKdAhaOqgaTwrR52fCqolaCl0JTUZu0YNIqUdeo3MbnqC95HIK82N0h6oL9mWwIDAQAB
-----END PUBLIC KEY-----"""
app_private_key_string = """-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA6M7zHSmJhDrrfKt7eYapbbGhdth72wcws74vLQamlzIpCuLLTaJFUkva0fVlwAwl0l9DZotLSORKxxIORhzslOxtwGnQ+staKJUEe2AhLVu/v5jRTIuVPVFm7qgWXD/H3vNF9kL9jFCl1REvgc207xe0r1rk41cQFAodWmJEp+0pcKq6UzAi8ZNhnjbSQjOE1WbMDIb+lgXQdDlk/Bp5w2W7wNJ6oAISejruKAOvCSnbk1WRUYUDPXxbJakhqBoozrni8R5LKEQ/MJAs9ztCi3h3RKdAhaOqgaTwrR52fCqolaCl0JTUZu0YNIqUdeo3MbnqC95HIK82N0h6oL