CaoJay/Blog/user/views.py

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