Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

wechat 虚幻 631℃ 0评论

编辑账号和修改密码

读取正确的账号信息:

拦截器捕获全局用户登录信息:

20210801095436 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

首页传递current_user传递 用户信息

20210801092745 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

修改模板动态读取数据:

20210801095546 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

修改后可以看到信息:

20210801095339 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

设配所有页面数据读取:

创建Helper.py文件:

20210801100236 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

from  flask import  g,render_template

'''
统一渲染方法

'''

def ips_render(template, context = {}):
    if 'current_user' in g:
        context['current_user'] = g.current_user
    return render_template(template, **context)

修改index.py

# -*- coding: utf-8 -*-
from flask import Blueprint,g
from common.libs.Helper import ops_render

route_index = Blueprint( 'index_page',__name__ )

@route_index.route("/")
def index():
    current_user = g.current_user
    return ops_render( "index/index.html")

此时可以正常显示:

20210801101015 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

使得编辑能够正常使用:User.py

from common.libs.Helper import ops_render

@route_user.route( "/edit" )
def edit():
    return ops_render( "user/edit.html" )

修改后 可以正常使用了

20210801101326 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

Ctrl+R统一替换:

20210801101541 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

通过快捷键统一替换:选择路径

20210801101822 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

编辑当前登录账号功能实现

20210801102711 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

再次启动,可以看到已经从数据库中读取了:

20210801102746 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

点击保存按钮,发送post请求

20210801102852 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

创建一个edit.js文件

20210801102953 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

;
var user_edit_ops = {
    init:function () {
        this.eventBind();
    },
    eventBind:function () {

        $(".user_edit_wrap .save").click(
            function () {
                var btn_target = $(this);
                if (btn_target.hasClass("disabled")){
                    common_ops.alert("正在处理,请不要重复提交")
                    return;
                }

                var nickname_target = $(".user_edit_wrap input[name=nickname]");
                var nickname = nickname_target.val();

                var email_target = $(".user_edit_wrap input[name=email]");
                var email = email_target.val();

                if (!nickname || nickname.length<2){
                    common_ops.tip("请输入符合规范的姓名", nickname_target);
                    return false
                }

                if (!email || email.length<2){
                    common_ops.tip("请输入符合规范的姓名", email_target);
                    return false
                }
            });
    }
}

$(document).ready(function () {
    user_edit_ops.init()
})

edit.html引入这个js文件

20210801104507 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

将姓名清空,然后测试一下:

20210801104546 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

添加ajax提交数据到服务器

$(".user_edit_wrap .save").click(
            function () {
                var btn_target = $(this);
                if (btn_target.hasClass("disabled")){
                    common_ops.alert("正在处理,请不要重复提交")
                    return;
                }

                var nickname_target = $(".user_edit_wrap input[name=nickname]");
                var nickname = nickname_target.val();

                var email_target = $(".user_edit_wrap input[name=email]");
                var email = email_target.val();

                if (!nickname || nickname.length<2){
                    common_ops.tip("请输入符合规范的姓名", nickname_target);
                    return false
                }

                if (!email || email.length<2){
                    common_ops.tip("请输入符合规范的姓名", email_target);
                    return false
                }

                btn_target.addClass("disabled");

                var data={
                    nickname :nickname,
                    email : email
                }

                $.ajax({
                url:common_ops.buildUrl("/user/edit"),
                type:"POST",
                data:data,
                dataType:'json',
                success:function (res) {
                    btn_target.removeClass("disabled")
                    var callback = null;
                    if(res.code == 200){
                        callback = function () {
                            window.location.href = window.location.href;
                        }
                    }
                    common_ops.alert(res.msg, callback)
                }
            })
            });

User.py添加Post支持:

from flask import Blueprint,request,jsonify,make_response,redirect,g

from application import app,db

@route_user.route( "/edit" , methods=["GET", "POST"] )
def edit():
    if request.method == "GET":
        return ops_render( "user/edit.html" )

    resp = {'code':200,'msg':'操作成功', 'data':{}}

    req = request.values
    nickname = req['nickname'] if 'nickname' in req else ''
    email = req['email'] if 'email' in req else ''

    if nickname is None or len(nickname)<1:
        resp['code']=-1
        resp['msg']='请输入符合规范的姓名'
        return jsonify(resp)

    if email is None or len(email)<1:
        resp['code']=-1
        resp['msg']='请输入符合规范的邮箱'
        return jsonify(resp)

    user_info = g.current_user
    user_info.nickname = nickname
    user_info.email = email

    db.session.add(user_info)
    db.session.commit()
    return jsonify(resp)

可以看到成功修改用户名

20210801161534 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

这样的话,编辑功能已经实现了 接下来实现修改密码功能

修改密码功能的实现

reset_pwd.html文件修改模板的动态变量读取

20210801162120 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

创建restPwd.js

20210801162321 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

;
var mod_pwd_ops = {
    init:function () {
        this.eventBind();
    },
    eventBind:function () {

        $("#save").click(
            function () {
                var btn_target = $(this);
                if (btn_target.hasClass("disabled")){
                    common_ops.alert("正在处理,请不要重复提交")
                    return;
                }

                var old_password = $("#old_password").val();
                var new_password = $("#new_password").val();

                if (!old_password){
                    common_ops.alert("请输入原密码");
                    return false
                }

                if (!new_password || new_password.length<6){
                    common_ops.alert("请输入符合规范的密码");
                    return false
                }

                btn_target.addClass("disabled");

                var data={
                    old_password : old_password,
                    new_password : new_password
                }

                $.ajax({
                url:common_ops.buildUrl("/user/reset-pwd"),
                type:"POST",
                data:data,
                dataType:'json',
                success:function (res) {
                    btn_target.removeClass("disabled")
                    var callback = null;
                    if(res.code == 200){
                        callback = function () {
                            window.location.href = window.location.href;
                        }
                    }
                    common_ops.alert(res.msg, callback)
                }
            })
            });
    }
}

$(document).ready(function () {
    mod_pwd_ops.init()
})

reset_pwd.html引入js文件:

20210801162535 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

User.py接口实现:

@route_user.route( "/reset-pwd" , methods=["GET", "POST"])
def resetPwd():
    if request.method == "GET":
        return ops_render( "user/reset_pwd.html" )

    resp = {'code': 200, 'msg': '操作成功', 'data': {}}

    req = request.values
    old_password = req['old_password'] if 'old_password' in req else ''
    new_password = req['new_password'] if 'new_password' in req else ''

    if old_password is None or len(old_password) < 6:
        resp['code'] = -1
        resp['msg'] = '请输入符合规范的原密码'
        return jsonify(resp)

    if new_password is None or len(new_password) < 6:
        resp['code'] = -1
        resp['msg'] = '请输入符合规范的修改后的密码'
        return jsonify(resp)

    if old_password == new_password:
        resp['code'] = -1
        resp['msg'] = '密码相同,请再次输入'
        return jsonify(resp)

    user_info = g.current_user
    user_info.login_pwd = UserService.genePwd(new_password, user_info.login_salt)

    db.session.add(user_info)
    db.session.commit()
    return jsonify(resp)

重启服务:

会发现一个问题,修改成功后,会跳转回登录页面,这时因为拦截器起作用了。

每刷一次页面,它都会验证是否登录成功,我们cookie是通过密码计算的

20210801164821 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能所以这里肯定不同了。所以会如何解决这个问题呢?

这里需要再次刷一次cookie

20210801165138 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

这样就不会回退了

信息编辑和修改密码的切换

20210801165328 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

创建tab_user.html

20210801165643 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

<div class="row  border-bottom">
    <div class="col-lg-12">
        <div class="tab_title">
            <ul class="nav nav-pills">
                <li {% if current == "edit" %}class="current"{% endif %}>
                    <a href="{{ buildUrl('/user/edit') }}">信息编辑</a>
                </li>
                <li {% if current == "reset-pwd" %}class="current"{% endif %}>
                    <a href="{{ buildUrl('/user/reset-pwd') }}">修改密码</a>
                </li>
            </ul>
        </div>
    </div>
</div>

替换edit.htmllayout_user.html

20210801170153 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

User.py中传递current参数:

20210801171109 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

20210801171137 - Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

此时可以正常切换了。

转载请注明:虚坏叔叔 » Python flask实战订餐系统微信小程序-23实现登录和修改账号功能

喜欢 (13)

您必须 登录 才能发表评论!