g214/account/views.py

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')