198 lines
6.9 KiB
Python
198 lines
6.9 KiB
Python
# coding=utf-8
|
|
from django.contrib.admin.views.decorators import staff_member_required
|
|
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
|
|
from django.shortcuts import render, HttpResponseRedirect, get_object_or_404, HttpResponse
|
|
from django.contrib.auth.models import User
|
|
from metadata.models import LineItem, Order, Favorite, Cart
|
|
from django.contrib import messages
|
|
from django.contrib.auth import authenticate, login, logout
|
|
|
|
|
|
# Create your views here.
|
|
|
|
|
|
def user_login(request):
|
|
username = None
|
|
password = None
|
|
if request.method == 'POST':
|
|
if not request.POST.get('username'):
|
|
messages.error(request, u'请输入用户名')
|
|
else:
|
|
username = request.POST.get('username')
|
|
if not request.POST.get('password'):
|
|
messages.error(request, u'请输入密码')
|
|
else:
|
|
password = request.POST.get('password')
|
|
if username is not None and password is not None:
|
|
user = authenticate(username=username, password=password)
|
|
if user is not None:
|
|
if user.is_active:
|
|
login(request, user)
|
|
cart = Cart.objects.filter(user_id=user.id)
|
|
if not cart:
|
|
cart = Cart()
|
|
cart.user_id = user.id
|
|
cart.save()
|
|
count = LineItem.objects.filter(cart=user.cart).count()
|
|
request.session['count'] = count
|
|
return HttpResponseRedirect('/')
|
|
else:
|
|
messages.error(request, 'disabled username')
|
|
else:
|
|
messages.error(request, 'invalid user')
|
|
return render(request, 'account/login.html')
|
|
|
|
|
|
def user_register(request):
|
|
username = None
|
|
email = None
|
|
password = None
|
|
confirm_password = None
|
|
flag = False
|
|
|
|
if request.method == 'POST':
|
|
if not request.POST.get('username'):
|
|
messages.error(request, u'请输入用户名')
|
|
else:
|
|
username = request.POST.get('username')
|
|
if not request.POST.get('email'):
|
|
messages.error(request, u'请输入邮箱')
|
|
else:
|
|
email = request.POST.get('email')
|
|
if not request.POST.get('password'):
|
|
messages.error(request, u'请输入密码')
|
|
else:
|
|
password = request.POST.get('password')
|
|
if not request.POST.get('confirm_password'):
|
|
messages.error(request, u'请再次输入密码')
|
|
else:
|
|
confirm_password = request.POST.get('confirm_password')
|
|
|
|
if password is not None and confirm_password is not None:
|
|
if password == confirm_password:
|
|
flag = True
|
|
else:
|
|
messages.error(request, u'两次输入的密码不一致,请重新输入')
|
|
|
|
filter_result = User.objects.filter(username=username)
|
|
if len(filter_result) > 0:
|
|
messages.error(request, u"对不起,您输入的用户名已被注册")
|
|
return render(request, "account/register.html")
|
|
|
|
if username is not None and password is not None and confirm_password is not None and email is not None and flag:
|
|
user = User.objects.create_user(username, email, password)
|
|
user.is_active = True
|
|
user.save()
|
|
messages.success(request, u'注册成功')
|
|
return HttpResponseRedirect('/account/login')
|
|
|
|
return render(request, 'account/register.html')
|
|
|
|
|
|
def user_logout(request):
|
|
logout(request)
|
|
messages.error(request, u'您已经成功退出系统')
|
|
return HttpResponseRedirect('/')
|
|
|
|
|
|
def cart(request):
|
|
user = request.user
|
|
current_cart = user.cart
|
|
cart_id = current_cart.id
|
|
items = LineItem.objects.filter(cart_id=cart_id).all()
|
|
|
|
return render(request, 'account/my_cart.html', {"items": items})
|
|
|
|
|
|
def favorite(request):
|
|
user = request.user
|
|
favorites = Favorite.objects.filter(user=user).all()
|
|
return render(request, 'account/my_favorite.html', {"favorites": favorites})
|
|
|
|
|
|
def delete_cart_data(request, id):
|
|
line_item = get_object_or_404(LineItem, pk=id)
|
|
line_item.delete()
|
|
messages.success(request, u'您购物车中的数据已被成功删除!')
|
|
|
|
return HttpResponseRedirect('/account/cart')
|
|
|
|
|
|
def delete_favorite(request, id):
|
|
favorite = get_object_or_404(Favorite, pk=id)
|
|
favorite.delete()
|
|
messages.success(request, u'您收藏的数据已被成功删除!')
|
|
|
|
return HttpResponseRedirect('/account/favorite')
|
|
|
|
|
|
def add_to_order(request):
|
|
if request.method == 'POST':
|
|
item_ids = request.POST.getlist('item_ids')
|
|
items = LineItem.objects.filter(id__in=item_ids).all()
|
|
|
|
return render(request, 'account/new_order.html', {"items": items})
|
|
|
|
|
|
def save_to_order(request):
|
|
if request.method == 'POST':
|
|
real_name = request.POST.get('real_name')
|
|
email = request.POST.get('email')
|
|
phone = request.POST.get('phone')
|
|
post_code = request.POST.get('post_code')
|
|
unit = request.POST.get('unit')
|
|
address = request.POST.get('address')
|
|
purpose = request.POST.get('purpose')
|
|
item_ids = request.POST.getlist('item_ids')
|
|
user = request.user
|
|
order = Order(real_name=real_name, email=email, phone=phone, post_code=post_code,
|
|
unit=unit, address=address, purpose=purpose, user=user)
|
|
order.save()
|
|
for item_id in item_ids:
|
|
item = get_object_or_404(LineItem, pk=item_id)
|
|
item.cart_id = None
|
|
item.save()
|
|
order.lineitem_set.add(item)
|
|
|
|
messages.success(request, u'您的数据申请已经提交')
|
|
return HttpResponseRedirect('/account/order')
|
|
|
|
|
|
def my_order(request):
|
|
user = request.user
|
|
orders = Order.objects.filter(user=user).exclude(lineitem=None)
|
|
paginator = Paginator(orders, 20)
|
|
page = int(request.GET.get('page', 1))
|
|
try:
|
|
order_list = paginator.page(page)
|
|
except PageNotAnInteger:
|
|
order_list = paginator.page(1)
|
|
except EmptyPage:
|
|
order_list = paginator.page(paginator.num_pages)
|
|
return render(request, 'account/my_order.html', {"orders": order_list})
|
|
|
|
|
|
@staff_member_required
|
|
def order_audits(request):
|
|
orders = Order.objects.exclude(lineitem=None)
|
|
paginator = Paginator(orders, 20)
|
|
page = int(request.GET.get('page', 1))
|
|
try:
|
|
order_list = paginator.page(page)
|
|
except PageNotAnInteger:
|
|
order_list = paginator.page(1)
|
|
except EmptyPage:
|
|
order_list = paginator.page(paginator.num_pages)
|
|
return render(request, 'account/order_audits.html', {"orders": order_list})
|
|
|
|
|
|
@staff_member_required
|
|
def order_audit_detail(request, id):
|
|
if request.method == 'GET':
|
|
order = Order.objects.get(pk=id)
|
|
return render(request, 'account/order_audit_detail.html', {"order": order})
|
|
else:
|
|
order = Order.objects.get(pk=id)
|
|
order.status = 1
|
|
order.save()
|
|
return HttpResponseRedirect('/account/audits') |