关于用Flask建立一个简单的web应用

from flask import Flask,render_template,request,redirect,session,url_for
app = Flask(__name__)
USER = {
    1:{'name':'wdc','age':18,'text':'我的名字叫做王德昌'},
    2:{'name':'wdw','age':16,'text':'我的名字叫做王德武'},
    3:{'name':'pjj','age':19,'text':'我的名字叫做潘军军'}
    }
#用来查看是否有用户登录,用session这个全局变量来保存
session = {}
@app.route('/',methods = ['GET','POST']) #每一次将主页设置为‘/’,要修改请求方式,因为在/login的url中要输入东西
@app.route('/login',methods = ['GET','POST'],endpoint='l1') #endpoint是一个反向输出
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        user = request.form.get('user')
        pwd = request.form.get('pwd')
        if user == 'wdc' and pwd == '123':
            #登录成功后用session来保存这个用户信息
            session['user_info'] = user
            return redirect('http://www.baidu.com')
        return render_template('login.html',error = "用户名或密码错误")

@app.route('/index',methods=['GET'])
def index():
    url_1 = url_for('l1')
    user = session.get('user_info')
    if user:
        return render_template('index.html',user_dict = USER)
    return redirect(url_1)

@app.route('/detail/<int:nid>',methods = ['GET'])
def detail(nid):
    url_1 = url_for('l1')
    user = session.get('user_info')
    if user:
        info = USER.get(nid)
        return render_template('detail.html',info = info)
    return redirect(url_1)

app.run(debug=True)

根据代码来分析以及整理下思路:

这是一个很简单的flask的简单web应用

那么现在就来分析下我对这个简单应用的理解以及思路

知识点:

/login中的知识点

1.首先从创建/login这个url开始,从这个url中我们可以看到俩种常见的请求方法methods = ['GET','POST']

当用户没有在网页中提交数据的时候,网页默认使用的是GET的请求方法,当网页有提交的数据的时候,我们要改用POST方法

2.利用常见的render_template() 和 redirect() 以及request

render_templat的作用是返回一个html页面,并且在后面的参数是给html中的页面提供参数

redirect的作用是用来跳转网页

request可以让用户找到请求的信息,比如本例中的request.methods 可以获取到页面中的请求方法

/index中的知识点

1.在本例中/index是用来返回用户数据的信息,所以直接使用render_template来返回指定的html页面,使用USER给html中的页面获取哦参数,从而使在html中可以获取到用户的信息

在index.html其实才是这个url的重点所在

<body>
    <h1>用户列表</h1>
    <table>
        {%for k,v in user_dict.items()%}
        <tr>
            <td>{{k}}</td>
            <td>{{v['name']}}</td>
            <td><a href="/detail/{{k}}">查看详细</a></td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

2.使用字典的取键值的方法来获取USER中的信息,并且设置新的url跳转到详细信息中

/detail/<int>中的重点是:

        info = USER.get(nid)
        return render_template('detail.html',info = info)
获取url中的信息,并且通过这个信息获取USER中的信息
<body>
    <h1>详细信息</h1>
    <div>{{info['text']}}</div>
</body>

获取USER中的详细信息。

然后从全局代码出发,可以看到session的作用是用来临时存储用户的

如果没有成功的存取,或者是存取失败的那么都将会跳回到/login进行用户认证,认证成功后才可以进入别的url访问资源

小的知识点:

endpoint:指代url的别名

url_for:将指代的别名赋给一个新的变量,那么这个变量就代表了别名前指代的url

index.html的源码

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户登录</h1>
    <form method="post">
        <input type="text" name="user">
        <input type="text" name="pwd">
        <input type="submit" value="登录" >{{error}}


    </form>
</body>
</html>

login.html的源码

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户列表</h1>
    <table>
        {%for k,v in user_dict.items()%}
        <tr>
            <td>{{k}}</td>
            <td>{{v['name']}}</td>
            <td><a href="/detail/{{k}}">查看详细</a></td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

detail.html的源码

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>详细信息</h1>
    <div>{{info['text']}}</div>
</body>
</html>

  

原文地址:https://www.cnblogs.com/dachang/p/11174774.html