天天看點

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

讀取正确的賬号資訊:

攔截器捕獲全局使用者登入資訊:

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

首頁傳遞current_user傳遞 使用者資訊

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

修改模闆動态讀取資料:

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

修改後可以看到資訊:

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

設配所有頁面資料讀取:

建立Helper.py檔案:

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

此時可以正常顯示:

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

使得編輯能夠正常使用:User.py

from common.libs.Helper import ops_render

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

修改後 可以正常使用了

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

Ctrl+R統一替換:

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

通過快捷鍵統一替換:選擇路徑

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

編輯目前登入賬号功能實作

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

再次啟動,可以看到已經從資料庫中讀取了:

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

點選儲存按鈕,發送post請求

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

建立一個edit.js檔案

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檔案

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

将姓名清空,然後測試一下:

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)      

可以看到成功修改使用者名

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

這樣的話,編輯功能已經實作了 接下來實作修改密碼功能

修改密碼功能的實作

reset_pwd.html檔案修改模闆的動态變量讀取

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

建立restPwd.js

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檔案:

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是通過密碼計算的

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

是以這裡肯定不同了。是以會如何解決這個問題呢?

這裡需要再次刷一次cookie

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

這樣就不會回退了

資訊編輯和修改密碼的切換

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

建立​

​tab_user.html​

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.html​

​​和​

​layout_user.html​

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能

​User.py​

​​中傳遞​

​current​

​參數:

Python flask實戰訂餐系統微信小程式-23實作登入和修改賬号功能