views.py 4.3 KB
Newer Older
C
V1.2  
Corley 已提交
1
from flask import Blueprint, render_template, views, request, redirect, url_for, session, g
C
V1.3  
Corley 已提交
2 3
from flask_mail import Message
from apps.cms.forms import LoginForm, ResetPwdForm, ResetEmailForm
C
V1.1  
Corley 已提交
4
from apps.cms.models import CMSUser
C
V1.3  
Corley 已提交
5 6
from exts import db, mail
from utils import restful, random_captcha, clcache
C
V1.2  
Corley 已提交
7

C
V1.1  
Corley 已提交
8
# from .decorators import login_required  # .代表当前路径
C
V1.0  
Corley 已提交
9 10 11

cms_bp = Blueprint('cms', __name__, url_prefix='/cms')

C
V1.1  
Corley 已提交
12 13 14
from .hooks import before_request


C
V1.0  
Corley 已提交
15
@cms_bp.route('/')
C
V1.1  
Corley 已提交
16
# @login_required
C
V1.0  
Corley 已提交
17
def index():
C
V1.1  
Corley 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31
    return render_template('cms/cms_index.html')


@cms_bp.route('/logout/')
def logout():
    # 清空session
    del session['user_id']
    # 重定向到登录页面
    return redirect(url_for('cms.login'))


@cms_bp.route("/profile/")
def profile():
    return render_template("cms/cms_profile.html")
C
V1.0  
Corley 已提交
32 33 34


class LoginView(views.MethodView):
C
V1.1  
Corley 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
    def get(self, message=None):
        return render_template('cms/cms_login.html', message=message)

    def post(self):
        login_form = LoginForm(request.form)
        # 判断表单是否验证
        if login_form.validate():
            # 获取数据
            email = login_form.email.data
            password = login_form.password.data
            remember = login_form.remember.data
            user = CMSUser.query.filter_by(email=email).first()
            # 根据用户验证密码是否正确
            if user and user.check_password(password):
                # 将用户id记录入session
                session['user_id'] = user.id
                # 如果记住密码,需要持久化
                if remember:
                    session.permanent = True
                # 登录成功,则跳转到后台首页
                return redirect(url_for('cms.index'))
            else:
                return self.get(message='邮箱或密码有误')
        else:
            print(login_form.errors)
C
V1.2  
Corley 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
            return self.get(message=login_form.get_error())


class ResetPwdView(views.MethodView):
    def get(self):
        return render_template('cms/cms_resetpwd.html')

    def post(self):
        form = ResetPwdForm(request.form)
        if form.validate():
            oldpwd = form.oldpwd.data
            newpwd = form.newpwd.data
            # 获取当前用户
            user = g.cms_user
            if user.check_password(oldpwd):
                # 密码验证通过,则修改密码
                user.password = newpwd
                db.session.commit()
                return restful.success()
            else:
                return restful.params_error(message='旧密码错误')
        else:
            # 当给Ajax返回数据时,要返回json格式的数据
            return restful.params_error(message=form.get_error())


class ResetEmailView(views.MethodView):
    def get(self):
        return render_template('cms/cms_resetemail.html')

    def post(self):
C
V1.3  
Corley 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
        form = ResetEmailForm(request.form)
        if form.validate():
            email = form.email.data
            # 修改用户邮箱
            g.cms_user.email = email
            db.session.commit()
            return restful.success()
        else:
            return restful.params_error(form.get_error())


class EmailCaptchaView(views.MethodView):
    def get(self):
        email = request.args.get('email')
        if not email:
            return restful.params_error('请传递邮箱参数')
        # 发送邮件验证码,可以是4位或6位的数字与英文组合
        captcha = random_captcha.get_random_captcha(4)
        try:
            message = Message('熊熊论坛验证码', recipients=[email], body='您正在进行更改邮箱验证,验证码是%s,5分钟内有效,请及时输入、注意保密。' % captcha)
            mail.send(message)
        except Exception as e:
            print(e.args[0])
            return restful.server_error('邮件发送异常,请检查重试')
        clcache.save_captcha(email, captcha)
        return restful.success(message='邮件发送成功,请注意接收验证码')
C
V1.0  
Corley 已提交
117 118


C
V1.2  
Corley 已提交
119 120 121
cms_bp.add_url_rule('/login/', view_func=LoginView.as_view('login'))
cms_bp.add_url_rule('/resetpwd/', view_func=ResetPwdView.as_view('resetpwd'))
cms_bp.add_url_rule('/resetemail/', view_func=ResetEmailView.as_view('resetemail'))
C
V1.3  
Corley 已提交
122
cms_bp.add_url_rule('/email_captcha/', view_func=EmailCaptchaView.as_view('email_captcha'))