zoukankan      html  css  js  c++  java
  • 关于用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>
    

      

  • 相关阅读:
    Mybatis oracle多表联合查询分页数据重复的问题
    The Decade of Deep Learning
    D3S – A Discriminative Single Shot Segmentation Tracker
    Recent Advancements in NLP
    A list of datasets directly related to Music Information Retrieval Datasets
    Best Resources for Imbalanced Classification
    Attention-based Dropout Layer for Weakly Supervised Object Localization
    Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition
    Batch DropBlock Network for Person Re-identification and Beyond
    Cross-channel Communication Networks
  • 原文地址:https://www.cnblogs.com/dachang/p/11174774.html
Copyright © 2011-2022 走看看