Flask学习记录#2

文章详细介绍了如何使用Python的Flask框架实现登录功能,包括GET和POST请求处理、session管理以及cookie的创建、获取和删除。同时涉及了用户名和密码验证以及登录表单和首页的展示。
登录页面的实现:
from flask import Flask, redirect ,render_template , request, abort,url_for
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index7.html')
@app.route('/login',methods = ['POST','GET'])#定义/login地址网页获取方式有get和post#
def login():
    if request.method == 'POST':#如果是post提交(从input中得到),post数据为admin则跳转到/success网页,不是admin则跳转为401(没有权限)#
        if request.form['username']=='admin':
            return redirect(url_for('success'))
        else:
            abort(401)
    elif request.method == 'GET':#如果是get得到(从网页链接处请求),则返回index7.html#
        return redirect(url_for('index'))
@app.route('/success')
def success():
    return 'logged in successfully'#定义success网页的内容#
if __name__ =='__main__':
    app.run(debug=True,threaded = True)

index7.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action = "/login" method="post">
        <p><input type="text" name="username"></p>
        <p><input type="submit" value="登录"></p>
    </form>
</body>
</html>

cookies的获取与删除:

from flask import Flask,make_response,request
app = Flask(__name__)
@app.route("/set_cookies")
def set_cookie():
    resp = make_response("success")#创造一个显示success的响应头resp,set和delcookie需要用到响应头作为对象#
    resp.set_cookie("aaa_key","aaa_value",max_age=3600)#创造一个cookie,名字是aaakey,赋值为aaavalue,最大存活时间是3600秒#
    return resp#返回响应头内容#
@app.route("/get_cookies")
def get_cookie():
    cookie_1 = request.cookies.get("aaa_key")#该函数得到aaakey的cookie赋值#
    return cookie_1
@app.route("/delete_cookies")
def delete_cookie():
    resp = make_response("del success")
    resp.delete_cookie("aaa_key")
    return resp#和获取同理#
if __name__ == '__main__':
    app.run(debug=True,threaded = True)

登录与注销的实现:

from flask import Flask
from flask import render_template
from flask import request
from flask import Flask,session,redirect,url_for,request
app = Flask(__name__)
app.secret_key = '123456'#设置数据密钥,未输入密钥的数据将会被加密为乱码(存储于session中的)#
@app.route('/')
def index():
    if 'username' in session:#检查username是否存在于session中,就是检测是否已经登录#
        user = session['username']
        return '登录用户名是:' + user + '<br>' + "<b><a href = '/logout'>点击这里注销</a></b>"
    else:#若没登陆,则跳转到登陆页面#
        return "您暂时未登录,<br><a href = '/login'><b>点击这里登录</b></a>"
@app.route('/login',methods = ['GET','POST'])
def login():
    if request.method == 'POST':#如果是post表单提交,则从表单中获取用户名#
        session['username'] = request.form['username']
        return redirect(url_for('index'))#回到首页,重新判断#
    elif request.method == 'GET':
        return render_template('登录表单.html')
@app.route('/logout')
def logout():
    session.pop('username',None)#删除,就是将session中的username重置为none默认值#
    return redirect(url_for('index'))
if __name__ == '__main__':
    app.run(debug=True,threaded = True)

用户名+密码组合登录:

from flask import Flask,flash,redirect,render_template,request,url_for
app = Flask(__name__)
app.secret_key = '123456'#设置密钥#
@app.route('/')
def index():
    return render_template('index.html')

@app.route('/login',methods = ['GET','POST'])
def login():
    errormsg = None#设置错误信息提示,此时没有被赋值(为none)#

    if request.method == 'POST':
        if request.form['username'] !='admin' or request.form['password'] !='admin':#判断用户名和密码是否为admin#
            errormsg = 'Invalid username or password. Please try again!'#不是的话(末尾的叹号)则返回该错误信息#
        else:
            flash('You were successfully logged in')#生成一个登录成功信息,flash函数会使其可以重定向到其他页面#
            return redirect(url_for('index'))#回到主页#

    return render_template('login9.html',error = errormsg)

if __name__ == "__main__":
    app.run(debug=True,threaded = True)

登录表单:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post" action="http://localhost:5000/login">
        <table>
            <tr>
                <td>Username</td>
                <td><input type="username" name="username"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="Submit"></td>
            </tr>
        </table>
    </form>
    {% if error %}
        <p><strong>Error</strong>: {{ error }}</p>
    {% endif %}
</body>
</html>

首页:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% with messages = get_flashed_messages() %}
        {% if messages %}
            {% for message in messages %}
                <p>{{ message }}</p>
            {% endfor %}
        {% endif %}
    {% endwith %}
    <h3>Welcome!</h3>
    <a href="{{url_for('login')}}">login</a>
</body>
</html>

首先,{% with messages = get_flashed_messages() %}这行代码用于获取通过flash()函数存储的消息,并将其保存在名为messages的变量中。

然后,{% if messages %}这行代码检查是否存在消息。如果存在消息,就会进入下一层级。

在下一层级中,{% for message in messages %}这行代码是一个循环语句,用于遍历所有的消息。

接下来,<p>{{ message }}</p>这行代码会将每个消息以段落标签<p>包裹起来并进行显示。{{ message }}是一个模板变量,用于显示消息的内容。

当所有的消息都被显示完毕后,代码回到上一层级,继续执行。

最后,<h3>Welcome!</h3>显示一个标题,表示欢迎用户访问该页面。

<a href="{{url_for('login')}}">login</a>是一个超链接,指向名为"login"的路由。这个超链接可用于跳转到登录页面。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值