import json
from django.db.models.signals import pre_init
from random import randint
from django.core.mail import send_mail
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, redirect
from FilmSystem.settings import EMAIL_HOST_USER, BASE_DIR
from userApp import models
# Create your views here.
from userApp.models import User, Birthday, VIP
from django.utils.deprecation import MiddlewareMixin
from mallApp.models import mallOrder
from movieApp.models import AppMovie1, AppMovie2, AppMovie3, AppMovie
from userApp.models import Order
from seatsApp.models import Seats
"""
def index(request):
return HttpResponse("
Hello, World!
")
"""
code = ''
# 主页加载
def index(request):
keyword = request.GET.get('keyword', '')
movie = []
if keyword:
movie = AppMovie.objects.filter(moviename__contains=keyword)
movielist1 = AppMovie.objects.filter(movietype=1);
movielist2 = AppMovie.objects.filter(movietype=2);
movielist3 = AppMovie.objects.filter(movietype=3);
movielist4 = AppMovie.objects.filter(movietype=4);
return render(request, 'index.html', {'movielist1': movielist1, 'movielist2': movielist2, 'movielist3': movielist3, 'movielist4': movielist4, 'keyword': keyword, 'movie': movie})
def all(request):
keyword = request.GET.get('keyword', '')
if keyword:
movie = AppMovie.objects.filter(moviename__contains=keyword)
else:
movie = AppMovie.objects.all()
return render(request, 'all.html', {'movie': movie, 'keyword': keyword})
# 注册时的用户唯一性验证
def account(request):
user = request.GET.get('username')
print("username ==> "+user)
cnt = User.objects.filter(username=user).count()
print(cnt)
if cnt == 1:
# 这里说明已经存在ajax应该返回一个错误进行验证
# exist
print("!!!")
return JsonResponse({'msg':'exist'})
elif cnt == 0:
# 说明此账号可以使用
# ok
print("???")
return JsonResponse({'msg':'ok'})
# 登录
def login(request):
# 获取登录信息
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 查询用户信息
user = User.objects.filter(username=username,password=password)
# 判断用户信息
if user:
request.session['username'] = username
request.session['password'] = password
return redirect('/movie')
return render(request,'login.html',{'ERROR':'用户名或密码错误'})
return render(request, 'login.html')
# 无用
def login_check(request):
value = request.session.get('username')
if value:
return render(request, 'index.html')
else:
return redirect('/user/login')
# 验证码正确性检验
def codecheck(requset):
value = requset.GET.get('value')
print('value -----> ' + value)
global code
print('code ------> ' + code)
if value == '':
return JsonResponse({'msg': 'null'})
if code == value:
return JsonResponse({'msg':'ok'})
else:
return JsonResponse({'msg':'error'})
# 发送验证码
def sendcode(request):
email = request.GET.get('email')
print("email -----> " + email)
value = randint(100000, 999999)
global code
print("code -----> " + code)
code = str(value)
print("code -----> " + code)
return JsonResponse({'msg': 'ok', 'asd': code})
# send_status = send_mail('欢迎注册xxx电影院', '你的验证码: ' + code, '1250173534@qq.com', [email], fail_silently=False)
# if send_status:
# return JsonResponse({'msg':'ok', 'asd': code})
# return JsonResponse({'msg':'error'})
# 注册
def register(request):
# 上面的code 怎么和前端提交过来的验证码进行验证
if request.method == 'POST':
# 获取注册信息
realname = request.POST.get('realname')
username = request.POST.get('username')
email = request.POST.get('email')
phonenumber = request.POST.get('phone_num')
password = request.POST.get('password')
gender = request.POST.get('gender')
age = request.POST.get('age')
# 生日
birthday = Birthday(username=username)
birthday.save()
# VIP
vip = VIP(vipname=username)
vip.save()
# 新用户入库
user = User(username=username,password=password,email=email,phonenumber=phonenumber,birthday_id=birthday.id,gender=gender,age=age,realname=realname,vip_id=vip.id)
user.save()
user.image = 'user' + str(user.id) + '.jpg'
user.save()
return render(request,'login.html')
return render(request, 'register.html')
# 过滤器
class AuthMiddleware(MiddlewareMixin):
def process_request(self, request):
username = request.session.get('username',0)
user = User.objects.filter(username=username).first()
request.tracer = user
# 退出登录
def logout(request):
request.session.flush()
return redirect('/')
# 电影订单的展示与删除
def movieorder(request):
user = User.objects.get(username=request.session.get('username'))
type = request.GET.get('type')
# 删除订单
if type == '1':
id = request.GET.get('id')
order = Order.objects.get(id=id)
seatlist = order.seats.split(' ')
movieid = order.movieid
# 删除该订单中被选中的座位(数据表app_seats)
for seat_Order in seatlist:
seat_Seats = Seats.objects.filter(movieid=movieid,row_column=seat_Order)
seat_Seats.delete()
user.vip.money += 50
user.vip.save()
# 删除该条订单记录(数据表app_order)
order.delete()
return redirect('/user/center/movieorder?type=2')
# 响应展示
order = Order.objects.filter(username=request.session.get('username'))
movie = AppMovie.objects.all()
return render(request, 'movie_order.html', {'order': order, 'movie': movie, 'user': user})
# vip等级与金额的展示
def vip(money,user):
user.vip.money += money
user.vip.score += money/5
if user.vip.score > 200:
user.vip.level = '高级会员'
if user.vip.score > 500:
user.vip.level = '贵宾'
if user.vip.score > 1000:
user.vip.level = '至尊'
return user
# 充值
def charge(request):
user = User.objects.get(username=request.session.get('username'))
money = request.GET.get('money')
flag = 'isNum'
for item in money:
if item > '9' or item < '0':
flag = 'notNum'
break
print(flag)
if flag == 'isNum':
money = int(money)
user = vip(money, user)
user.vip.save()
return JsonResponse({'msg':'pass'})
else:
return JsonResponse({'msg':'error'})
# 用户个人信息的展示与修改
def userinfo(request):
# 获取当前用户信息
username = request.session.get('username')
user = User.objects.get(username=username)
orders = Order.objects.filter(username=username)
# 更新个人信息
if request.method == 'POST':
# 用户个人信息修改
user.vip.vipname = user.birthday.username = user.username = request.POST.get('username')
user.realname = request.POST.get('realname')
user.gender = request.POST.get('gender')
user.age = request.POST.get('age')
user.personality = request.POST.get('personality')
user.phonenumber = request.POST.get('phonenumber')
user.email = request.POST.get('email')
# 生日
user.birthday.year = request.POST.get('year')
user.birthday.month = request.POST.get('month')
user.birthday.day = request.POST.get('day')
# 更新表
user.save()
# session修改
request.session['username'] = user.username
# 电影选座订单表(因为该表未用外键关联用户)
for order in orders:
order.username = user.username
order.save()
user.vip.save()
user.birthday.save()
# 展示个人信息
return render(request, 'user_info.html',{'user':user})
# 商城订单的展示与删除
def mallorder(request):
type = request.GET.get('type')
user = User.objects.get(username=request.session.get('username'))
# 删除订单
if type == '1':
id = request.GET.get('id')
print(id)
order = mallOrder.objects.get(id=id)
# 退钱
vip = VIP.objects.get(vipname=user.username)
vip.money += int(order.goodsid.goodsprice)/2
vip.save()
order.delete()
# 响应展示
order = mallOrder.objects.filter(userid=user.id)
if type == '1':
return redirect('/user/center/mallorder?type=2')
return render(request, 'mall_order.html',{'order':order,'user':user})
# 头像更换时的加载
def upload(request):
if request.method == 'POST':
image = request.FILES.get('image')
user = User.objects.get(username=request.session.get('username'))
with open('static/img/' + user.image,'wb') as f:
# 加载图片数据
for line in image:
f.write(line)
print("image.name = ",image.name)
print("user.image = ",user.image)
# 返回ajax
try:
data = {'state':1}
except:
data = {'state':0}
f.close()
return JsonResponse(data)
return redirect('/user/center/userinfo')
# 用户的登录状态(是否有用户登录)
def check_user(request):
if request.session.is_empty():
return JsonResponse({'msg':'none_user'})
return JsonResponse({'msg':'has_user'})
def cancel(request):
id = request.POST.get('id')
row = Order.objects.get(id=id)
seats = row.seats
seats = seats.split()
money = len(seats) * 100
vip = VIP.objects.get(vipname=request.session.get('username'))
vip.money += money
vip.save()
row.delete()
return JsonResponse({'msg':'pass'})