Flask框架学习(一):Python Web Flask框架学习(一)

参考

Request对象

  • 通过flask的requst对象可以访问由POST或PUT请求传来的数据,只需调用request中的form属性即可。
  • form属性本身默认为ImmutableMultiDict属性,但是可以通过设置parameter_storage_class来改变其类型。
  • 利用request,我们可以实现一个简单的登陆页面:
    @app.route("/")
    @app.route("/<name>")
    def hello(name=None):
        return render_template("hello.html", name=name)
    
    
    @app.route("/login", methods=["GET", "POST"])
    def login():
        if request.method == "POST":
            if request.form['username'] == "admin" and request.form['password'] == "adminonly": # 通过form属性访问login页面POST来的用户名和密码
                return hello(name=request.form['username']) # 这里会引发一个问题,后文引入Redirect后会解决
            else:
                errmsg = "Username or Password is invalid."
                return error(errmsg=errmsg)
        return render_template("login.html")
    
    
    @app.route("/error")
    @app.route("/error/<ErrMsg>")
    def error(errmsg):
        return render_template("error.html", ErrMsg=errmsg)

    hello页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Hello page</title>
    </head>
    <body>
        <h2>
            This is a Hello Page
        </h2>
    
        {% if name %}
        <p>
            Hello, {{name}}
        </p>
        {% else %}
        <p> Hello World</p>
        {% endif %}
    </body>
    </html>

    Login页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
    </head>
    <body>
        <form method="post" action="login">
            <table>
                <tr>
                    <td>Username:</td>
                    <td>
                        <input type="text" id="username" name="username" />
                    </td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td>
                        <input type="password" id="password" name="password" />
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td>
                        <input type="submit" value="Submit" />
                    </td>
                </tr>
            </table>
        </form>
    </body>
    </html>

    Error界面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Error</title>
    </head>
    <body>
        <h2>
            This is a Error Page
        </h2>
        <label>
            {{ ErrMsg }}
        </label>
    </body>
    </html>

    对于此登录模块,输入正确用户名密码后会转向hello界面并显示用户名,输入账号密码不合法则会转向error页面。

  • 在请求form属性中的值时,如果form中没有对应的键,会抛出一个特殊的KeyError异常。其可以被标准的KeyError捕获到,但如果置之不理则会显示一个HTTP 400 Bad Request页面出来。
  • 对于通过URL传来的数据(如?key=value),可以使用args属性来获取
    searchword = request.args.get('key', '')
  • 代码中的注释小问题如下图,虽然显示为hello页面,但URL处依然为login。原因是return时只调用了hello方法,hello方法只是返回了一个HTML页面模板,使其显示在浏览器中,实际上还是停留在login这个方法中的,这里应该使用后文的redirect

Continue reading “Python Web Flask框架学习(二)”

Flask使用Werkzeug作为WSGI工具库,Jinja2作为模板页面语言

参考

安装Flask

  • 使用命令
    pip install flask

一个简单的Hello World页面

  • from flask import *
    
    app = Flask(__name__) # 创建flask对象
    
    
    @app.route('/') # 指定方法对应的url
    def hello_world():
        return 'hello world'
    
    
    if __name__ == "__main__":
        app.run(debug=True) # 启动web应用程序,开启debug模式
  • 在创建flask对象可以更换为其他名称,官方建议传入“__name__”,以免输入错误或重复的名字使flask无法调用模块
  • 在每个方法前使用.route()方法设定url,作用类似于.NET中的RouteConfig

Continue reading “Python Web Flask框架学习(一)”