Merge branch 'dev' into new-arch
* dev: mail 拆分模块 修改错误提示措辞 精简重置密码邮件模板 添加重置密码以后的跳转到登录页面 如果比赛已经开始,就不再显示之前测试题目的提交 admin 添加和编辑比赛页面增加提示 修改一些细节问题 添加重置密码页面和js 修改申请重置密码页面及js名称 添加重置密码api url,调整url 修改申请找回用户登录信息的api逻辑,没有用户名也可申请 添加找回用户信息功能,修改邮件模板的一些细节 去掉申请重置密码的服务中要求填写用户名,因为有很多用户不记得用户名了 添加重置密码页面的url,并在用户登录页面添加url 添加重置密码页面的url 修改检测邮箱api使其可以被重置密码页面使用 update read 增加访问首页的参数 修改首页样式;增加背景图片 Conflicts: oj/settings.py
This commit is contained in:
@@ -50,7 +50,6 @@ class EditUserSerializer(serializers.Serializer):
|
||||
|
||||
|
||||
class ApplyResetPasswordSerializer(serializers.Serializer):
|
||||
username = serializers.CharField(max_length=30)
|
||||
email = serializers.EmailField()
|
||||
captcha = serializers.CharField(max_length=4, min_length=4)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ from rest_framework.response import Response
|
||||
from utils.shortcuts import (serializer_invalid_response, error_response,
|
||||
success_response, error_page, paginate, rand_str)
|
||||
from utils.captcha import Captcha
|
||||
from mail.tasks import send_email
|
||||
from utils.mail import send_email
|
||||
|
||||
from .decorators import login_required
|
||||
from .models import User, UserProfile
|
||||
@@ -62,10 +62,9 @@ def index_page(request):
|
||||
if not request.user.is_authenticated():
|
||||
return render(request, "oj/index.html")
|
||||
|
||||
try:
|
||||
if request.META['HTTP_REFERER']:
|
||||
if request.META.get('HTTP_REFERER') or request.GET.get("index"):
|
||||
return render(request, "oj/index.html")
|
||||
except KeyError:
|
||||
else:
|
||||
return http.HttpResponseRedirect('/problems/')
|
||||
|
||||
|
||||
@@ -149,17 +148,27 @@ class UsernameCheckAPIView(APIView):
|
||||
class EmailCheckAPIView(APIView):
|
||||
def get(self, request):
|
||||
"""
|
||||
检测邮箱是否存在,存在返回状态码400,不存在返回200
|
||||
检测邮箱是否存在,用状态码标识结果
|
||||
---
|
||||
"""
|
||||
#这里是为了适应前端表单验证空间的要求
|
||||
reset = request.GET.get("reset", None)
|
||||
#如果reset为true说明该请求是重置密码页面发出的,要返回的状态码应正好相反
|
||||
if reset:
|
||||
existed = 200
|
||||
does_not_existed = 400
|
||||
else:
|
||||
existed = 400
|
||||
does_not_existed = 200
|
||||
|
||||
email = request.GET.get("email", None)
|
||||
if email:
|
||||
try:
|
||||
User.objects.get(email=email)
|
||||
return Response(status=400)
|
||||
return Response(status=existed)
|
||||
except Exception:
|
||||
return Response(status=200)
|
||||
return Response(status=200)
|
||||
return Response(status=does_not_existed)
|
||||
return Response(status=does_not_existed)
|
||||
|
||||
|
||||
class UserAdminAPIView(APIView):
|
||||
@@ -274,7 +283,7 @@ class ApplyResetPasswordAPIView(APIView):
|
||||
if not captcha.check(data["captcha"]):
|
||||
return error_response(u"验证码错误")
|
||||
try:
|
||||
user = User.objects.get(username=data["username"], email=data["email"])
|
||||
user = User.objects.get(email=data["email"])
|
||||
except User.DoesNotExist:
|
||||
return error_response(u"用户不存在")
|
||||
if user.reset_password_token_create_time and (now() - user.reset_password_token_create_time).total_seconds() < 20 * 60:
|
||||
@@ -286,14 +295,14 @@ class ApplyResetPasswordAPIView(APIView):
|
||||
|
||||
email_template = email_template.replace("{{ username }}", user.username).\
|
||||
replace("{{ website_name }}", settings.WEBSITE_INFO["website_name"]).\
|
||||
replace("{{ link }}", request.scheme + "://" + request.META['HTTP_HOST'] + "/reset_password/?token=" + user.reset_password_token)
|
||||
replace("{{ link }}", request.scheme + "://" + request.META['HTTP_HOST'] + "/reset_password/t/" + user.reset_password_token)
|
||||
|
||||
send_email(settings.WEBSITE_INFO["website_name"],
|
||||
user.email,
|
||||
user.username,
|
||||
settings.WEBSITE_INFO["website_name"] + u" 密码找回邮件",
|
||||
settings.WEBSITE_INFO["website_name"] + u" 登录信息找回邮件",
|
||||
email_template)
|
||||
return success_response(u"邮件发送成功")
|
||||
return success_response(u"邮件发送成功,请前往您的邮箱查收")
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
@@ -354,4 +363,14 @@ class SSOAPIView(APIView):
|
||||
token = rand_str()
|
||||
request.user.auth_token = token
|
||||
request.user.save()
|
||||
return render(request, "oj/account/sso.html", {"redirect_url": callback + "?token=" + token, "callback": callback})
|
||||
return render(request, "oj/account/sso.html", {"redirect_url": callback + "?token=" + token, "callback": callback})
|
||||
|
||||
|
||||
def reset_password_page(request, token):
|
||||
try:
|
||||
user = User.objects.get(reset_password_token=token)
|
||||
except User.DoesNotExist:
|
||||
return error_page(request, u"链接已失效")
|
||||
if (now() - user.reset_password_token_create_time).total_seconds() > 30 * 60:
|
||||
return error_page(request, u"链接已过期")
|
||||
return render(request, "oj/account/reset_password.html", {"user": user})
|
||||
|
||||
Reference in New Issue
Block a user