1. 安装virtualenv
    • sudo apt-get install python-virtualenv
      sudo easy_install virtualenvwrapper
  2. 安装完成后使用mkvirtualenv新建虚拟环境
    • 可能会找不到mkvirtualenv这个指令,此时需要进行环境变量的设置
      1. 新建虚拟环境目录
        mkdir $HOME/.virtualenvs
      2. 编辑.bashrc文件,添加新行
        export WORKON_HOME=$HOME/.virtualenvs
        source /usr/local/bin/virtualenvwrapper.sh
      3. 执行.bashrc
        source ~/.bashrc
    • 再使用mkvirtualenv指令新建虚拟环境
      mkvirtualenv [虚拟环境名称]
  3. 虚拟环境的一些指令
    • 进入指定环境
      workon [虚拟环境名称]
    • 退出虚拟环境
      deactivate
      
    • 删除虚拟环境
      rmvirtualenv [虚拟环境名称]

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框架学习(二)”