<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 90 實戰項目-中國工商銀行登錄和轉賬實現 ## ICDB.py ```text from flask import Flask, render_template, views, request, session, redirect,url_for from forms import RegistForm,LoginForm,TransferForm from exts import db import config from models import User from auth import login_required app = Flask(__name__) # 初始化app db.init_app(app) # 導入配置 app.config.from_object(config) # 首頁 @app.route('/') def index(): return render_template("index.html") # 注冊模塊 class RegistView(views.MethodView): # get請求 def get(self): return render_template("regist.html") # post請求 def post(self): # request.form:獲取所有表單數據 # 將表單數據傳入RegistForm中進行驗證數據是否輸入正確 form = RegistForm(request.form) # 如果驗證成功則會通過validate()方法返回一個True,反之False if form.validate(): # 通過form.字段名.data獲取表單數據 email = form.email.data username = form.username.data password = form.password.data deposit = form.deposit.data # 創建user對象 user = User(email=email,username=username,password=password,deposit=deposit) # 插入數據庫中 #------------- # 添加對象 db.session.add(user) # 提交到數據庫中 db.session.commit() return "注冊成功" else: # form.errors:驗證失敗錯誤的原因 print(form.errors) return "注冊失敗" # 通過類,進行添加url app.add_url_rule("/regist/",view_func=RegistView.as_view("regist")) # 登錄 class LoginView(views.MethodView): def get(self): return render_template("login.html") def post(self): form = LoginForm(request.form) if form.validate(): email = form.email.data password = form.password.data user = User.query.filter(User.email==email,User.password==password).first() if user: session["user_id"] = user.id # return "登錄成功" return redirect(url_for("index")) else: return "郵箱或密碼錯誤!" else: return render_template("login.html") app.add_url_rule(rule="/login/",view_func=LoginView.as_view("login")) # 轉賬 class TransferView(views.MethodView): decorators = [login_required] def get(self): return render_template("transfer.html") def post(self): form = TransferForm(request.form) if form.validate(): email = form.email.data money = float(form.money.data) user = User.query.filter(User.email==email).first() print(user.deposit) if user: # 從會話中讀取用戶id user_id = session.get("user_id") # # 如果沒登錄就跳轉登錄頁面 # if user_id is None: # return redirect(url_for("login")) # print(user_id) # User.query.get()以id進行查詢 myself = User.query.get(user_id) print(type(myself.deposit)) if myself.deposit >= money: user.deposit += money myself.deposit -= money db.session.commit() return "轉賬成功" else: return "余額不足" else: return "該用戶不存在" else: return "數據填寫不正確" app.add_url_rule(rule="/transfer/",view_func=TransferView.as_view("transfer")) if __name__ == '__main__': app.run(debug=True) ``` ## transfer.html ```text <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>中國工商銀行轉賬頁面</title> </head> <body> <form action="" method="post"> <table> <tbody> <tr> <td>轉到郵箱:</td> <td><input type="text" name="email"/></td> </tr> <tr> <td>轉到金額:</td> <td><input type="text" name="money"/></td> </tr> <tr> <td></td> <td><input type="submit" value="立即轉賬"/></td> </tr> </tbody> </table> </form> </body> </html> ``` ## forms.py ```text # 字段類型 from wtforms import Form,StringField,FloatField,IntegerField # 驗證 from wtforms.validators import Email,Length,EqualTo,InputRequired,NumberRange # from models import User class RegistForm(Form): # 驗證是否是郵箱格式 email = StringField(validators=[Email()]) # 驗證輸入的長度是否達到3~20 username = StringField(validators=[Length(3,20)]) # 同上 password = StringField(validators=[Length(6, 20)]) # 驗證是否和password字段的值一樣 password_repeat = StringField(validators=[EqualTo("password")]) # 判斷是否輸入值 deposit = FloatField(validators=[InputRequired()]) class LoginForm(Form): # 注意一定要Email填上括號 email = StringField(validators=[Email()]) password = StringField(validators=[Length(6,20)]) # # 自定義驗證器 # def validate_password(self): # pass # 驗證等同于post請求里面的驗證 # def validate(self): # # 調用父類 # result = super(LoginForm,self).validate() # if not result: # return False # # 獲取數據 # email = self.email.data # password = self.password.data # # 利用模型從數據庫中過濾信息 # user = User.query.filter(User.email == email,User.password == password).first() # if not user: # self.email.errors.append("郵箱或密碼錯誤") # return False # return True class TransferForm(Form): email = StringField(validators=[Email()]) money = FloatField(validators=[NumberRange(1,10000000)]) ``` ## login.html ```text <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>中國工商銀行登錄界面</title> </head> <body> <form action="" method="post"> <table> <tbody> <tr> <td>郵箱:</td> <td><input type="text" name="email"/></td> </tr> <tr> <td>密碼:</td> <td><input type="password" name="password"/></td> </tr> <tr> <td></td> <td><input type="submit" valule="登錄"/></td> </tr> </tbody> </table> </form> </body> </html> ``` ## auth.py ```text from functools import wraps from flask import session from flask import redirect,url_for # 驗證,防止跨越權限訪問 def login_required(func): @wraps(func) def wrapper(*args,**kwargs): user_id = session.get("user_id") if user_id: return func(*args,**kwargs) else: return redirect(url_for("login")) return wrapper ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看