完成登录功能,用session记住用户名

登录功能完成:

  1. js:设置return
  2. html:设置
    1. form
    2. input
    3. onclick="return fnLogin()"
  3. py:
    1. @app.route设置methods
    2. GET
    3. POST
      1. 读取表单数据
      2. 查询数据库
        1. 用户名密码对:
          1. 记住用户名
          2. 跳转到首页
        2. 用户名密码不对:
          1. 提示相应错误。

session:

  1. 从`flask`中导入`session`
  2. 设置`SECRET_KEY`
  3. 操作字典一样操作`session`:增加用户名`session['username']=`username
  4. from flask import Flask,render_template,request,redirect,url_for,session
    from flask_sqlalchemy import SQLAlchemy
    import config
    app = Flask(__name__)
    app.config.from_object(config)
    db=SQLAlchemy(app)
    
    class User(db.Model):
        __tablename__='user'
        id=db.Column(db.Integer,primary_key=True,autoincrement=True)
        username = db.Column(db.String(20), nullable=False)
        password = db.Column(db.String(20), nullable=False)
        nickname = db.Column(db.String(50))
    
    
    #db.create_all()
    
    #增加数据
    user=User(username = 'mis1234',password = '111111')
    db.session.add(user)
    db.session.commit()
    
    #查询数据
    user=User.query.filter(user.username == 'mis1234').first()
    print(user.id,user.username,user.password)
    
    
    #修改数据
    user=User.query.filter(user.username == 'mis3333').first()
    user.password = '0000'
    db.session.commit()
    
    #删除数据
    user=User.query.filter(user.username == 'mis3333').first()
    db.session.delete(user)
    db.session.commit()
    
    
    @app.route('/')
    def base():
    return render_template('base.html')


    @app.route('/denglu/',methods=['GET','POST'])
    def gg():
        if request.method == 'GET':
            return render_template('denglu.html') #跳转登录
        else:
            usern = request.form.get('username')
            passw = request.form.get('password')
            user = User.query.filter(User.username == usern).first()
            if user:
                if user.password == passw:
                    session['user'] = usern
                    session['user_id'] =user.id
                    session.parmanent = True
                    return redirect(url_for('shouye'))
                else:
                    return u'password error'
            else:
                return u'username is not existed'



    @app.route('/zhuche/', methods=['GET','POST'])
    def login ():
        if request.method =='GET':
            return render_template('zhuce.html')#跳转注册
        else:
            usern = request.form.get('username')
            passw = request.form.get('password')
            nickn = request.form.get('nickname')
            user = User.query.filter(User.username == usern).first()
            if user:
                return u'username existed'
            else:
                user1 = User(username = usern,password = passw,nickname=nickn)
                db.session.add(user1)#数据库操作
                db.session.commit()
                return redirect(url_for('gg'))


    @app.route('/question/')
    def question():
    return render_template('question.html')

    
    
    if __name__ == '__main__': app.run(debug=True)
    {% extends 'base.html' %}
    
    {% block denglutitle %}登录{% endblock %}
    
    {% block dengluhead %}
        <link href="../static/css/denglu.css" rel="stylesheet" type="text/css">
        <script src="../static/js/denglu.js"></script>
    {% endblock %}
    
    {% block denglubody %}
        <div class="box">
            <h2>登录</h2>
            <form action="{{ url_for('gg') }}" method="post">
            <div class="input_box">
                username:<input type="text" id="uname" placeholder="请输入用户名" name="username">
            </div>
            <div class="input_box">
                password:<input type="password" id="upass" placeholder="请输入密码" name="password">
            </div>
            <div id="error_box"><br></div>
            <div class="input_box">
                <button onclick="fnLogin()">Enter</button>
            </div>
            </form>
        </div>
    {% endblock %}
    function fnLogin(){
    var oUname = document.getElementById("uname");
    var oUpass = document.getElementById("upass");
    var oError = document.getElementById("error_box");
    var isError=true;
    oError.innerHTML="<br>";
    //uname
    if (oUname.value.length>10 || oUname.value.length < 6){

    oError.innerHTML="用户名必须是6-10位!";
    isError=false;
    return isError;
    }else if((oUname.value.charCodeAt(0)>=48)&& (oUname.value.charCodeAt(0))<=57){
    oError.innerHTML="用户名首字母不能是数字!";
    isError=false;
    return isError;
    }else for(var i=0;i<oUname.value.length;i++){
    if((oUname.value.charCodeAt(i)<48 || oUname.value.charCodeAt(i)>57) && (oUname.value.charCodeAt(i)<97 || oUname.value.charCodeAt(i)>122)){
    oError.innerHTML="用户名只能为数字和字母";
    isError=false;
    return isError;
    }


    }
    //upass
    if(oUpass.value.length>10 || oUpass.value.length<6 ){
    oError.innerHTML="用户密码6-10位!";
    return;
    }
    window.alert("登录成功!")
    }

     config.py

  5. #SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:wk21640913@127.0.0.1:3306/mis_1test?charset=utf8'
    import  os
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@127.0.0.1:3306/mis_1?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SECRET_KEY = os.urandom(24)

     

原文地址:https://www.cnblogs.com/123hyf/p/7887302.html