162 lines
5.9 KiB
Python
162 lines
5.9 KiB
Python
#!/usr/bin/env Python
|
|
# coding=utf-8
|
|
|
|
from django.shortcuts import render, HttpResponse, redirect
|
|
from django.contrib.auth import authenticate, login, logout
|
|
from .forms import User_Login_Form, User_Register_Form, Forget_Password_Form, Modify_Password_Form, \
|
|
Editor_UserForm, Editor_UserProfileForm
|
|
from django.contrib.auth.backends import ModelBackend
|
|
from django.contrib.auth.models import User
|
|
from django.db.models import Q
|
|
from django.contrib.auth.hashers import make_password
|
|
from .models import EmailVerifyRecord, UserProfile
|
|
from utils.email_send import send_register_email
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
|
|
def login_view(request):
|
|
if request.method != 'POST':
|
|
form = User_Login_Form()
|
|
else:
|
|
form = User_Login_Form(request.POST)
|
|
if form.is_valid():
|
|
username = form.cleaned_data['username']
|
|
password = form.cleaned_data['password']
|
|
user = authenticate(request, username=username, password=password)
|
|
if user is not None:
|
|
login(request, user)
|
|
# return redirect('user:login') # 跳转至登录界面
|
|
return redirect('user:center') # 跳转至个人中心
|
|
else:
|
|
return HttpResponse('账号或密码错误!!!')
|
|
else:
|
|
pass
|
|
return render(request, 'user/login.html', {'form': form})
|
|
|
|
|
|
def register_view(request):
|
|
if request.method != 'POST':
|
|
form = User_Register_Form()
|
|
else:
|
|
form = User_Register_Form(request.POST)
|
|
if form.is_valid():
|
|
new_user = form.save(commit=False)
|
|
new_user.set_password(form.cleaned_data.get('password'))
|
|
new_user.username = form.cleaned_data.get('email')
|
|
new_user.save()
|
|
send_register_email(form.cleaned_data.get('email'), 'register') # 邮件发送
|
|
return redirect('user:login')
|
|
else:
|
|
pass
|
|
return render(request, 'user/register.html', {'form': form})
|
|
|
|
|
|
class OwnBackend(ModelBackend):
|
|
def authenticate(self, request, username=None, password=None, **kwargs):
|
|
try:
|
|
user = User.objects.get(Q(username=username) | Q(email=username))
|
|
if user.check_password(password):
|
|
return user
|
|
except Exception as e:
|
|
return None
|
|
|
|
|
|
# 修改用户状态, 比对链接验证码
|
|
def active_user(request, active_code):
|
|
all_records = EmailVerifyRecord.objects.filter(code=active_code)
|
|
if all_records:
|
|
for record in all_records:
|
|
email = record.email
|
|
user = User.objects.get(email=email)
|
|
user.is_staff = True
|
|
user.save()
|
|
else:
|
|
return HttpResponse('错误链接')
|
|
return redirect('user:login')
|
|
|
|
|
|
def forget_pwd(request):
|
|
if request.method != "POST":
|
|
form = Forget_Password_Form()
|
|
else:
|
|
form = Forget_Password_Form(request.POST)
|
|
if form.is_valid():
|
|
email = form.cleaned_data.get('email')
|
|
exists = User.objects.filter(email=email).exists()
|
|
if exists:
|
|
# 发送邮件
|
|
send_register_email(email, 'forget')
|
|
return HttpResponse('邮件已经发送到你的邮箱里,请注意查收...')
|
|
else:
|
|
return HttpResponse('该邮箱未注册...')
|
|
else:
|
|
pass
|
|
|
|
return render(request, 'user/forget_pwd.html', {'form': form})
|
|
|
|
|
|
def forget_pwd_url(request, active_code):
|
|
if request.method != 'POST':
|
|
form = Modify_Password_Form()
|
|
else:
|
|
form = Modify_Password_Form(request.POST)
|
|
if form.is_valid():
|
|
record = EmailVerifyRecord.objects.get(code=active_code)
|
|
email = record.email
|
|
user = User.objects.get(email=email)
|
|
user.username = email
|
|
user.password = make_password(form.cleaned_data.get('password'))
|
|
user.save()
|
|
return HttpResponse('修改成功...')
|
|
else:
|
|
return HttpResponse('修改失败...')
|
|
|
|
return render(request, 'user/reset_pwd.html', {'form': form})
|
|
|
|
# 用户个人中心
|
|
@login_required(login_url='user:login')
|
|
def user_profile(request):
|
|
user = User.objects.get(username=request.user)
|
|
return render(request, 'user/user_profile.html', {'user': user})
|
|
|
|
|
|
def logout_operation(request):
|
|
logout(request)
|
|
return redirect('user:login')
|
|
|
|
# 修改用户信息
|
|
@login_required(login_url='user:login')
|
|
def editor(request):
|
|
user = User.objects.get(id=request.user.id)
|
|
if request.method == "POST":
|
|
try:
|
|
user_profile = user.userprofile
|
|
form = Editor_UserForm(request.POST, instance=user)
|
|
user_profile_form = Editor_UserProfileForm(request.POST, request.FILES, instance=user_profile)
|
|
if form.is_valid() and user_profile_form.is_valid():
|
|
form.save()
|
|
user_profile_form.save()
|
|
return redirect('user:center')
|
|
# else:
|
|
# return redirect('user:center')
|
|
except UserProfile.DoesNotExist as e:
|
|
form = Editor_UserForm(request.POST, instance=user)
|
|
user_profile_form = Editor_UserProfileForm(request.POST, request.FILES)
|
|
if form.is_valid() and user_profile_form.is_valid():
|
|
form.save()
|
|
# user_profile_form.save()
|
|
new_user_profile = user_profile_form.save(commit=False)
|
|
new_user_profile.owner = request.user
|
|
new_user_profile.save()
|
|
return redirect('user:center')
|
|
else:
|
|
try:
|
|
user_profile = user.userprofile
|
|
form = Editor_UserForm(instance=user)
|
|
user_profile_form = Editor_UserProfileForm(instance=user_profile)
|
|
except UserProfile.DoesNotExist as e:
|
|
form = Editor_UserForm(instance=user)
|
|
user_profile_form = Editor_UserProfileForm()
|
|
|
|
return render(request, 'user/editor_user.html', locals())
|