Python学习:Flask框架和jinja2模板

来源:互联网 发布:软件开发自学 编辑:程序博客网 时间:2024/05/28 18:42

上一次使用了WSGI提供的接口构建了一个简单的web应用,但是WSGI提供的接口相对于web应用的逻辑来说还是太低级了,如果要处理不同的url那么wsgi里面的处理就会非常麻烦.所以python提供了很多的web框架,我们这需要用装饰器把自己的函数和不同的url关联起来就可以了.

from flask import Flaskfrom flask import requestapp = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def home():    return '<h1>Home</h1>'@app.route('/signin', methods=['GET'])def signin_form():    return '''<form action="/signin" method="post">              <p><input name="username"></p>              <p><input name="password" type="password"></p>              <p><button type="submit">Sign In</button></p>              </form>'''@app.route('/signin', methods=['POST'])def signin():    # 需要从request对象读取表单内容:    if request.form['username']=='admin' and request.form['password']=='password':        return '<h3>Hello, admin!</h3>'    return '<h3>Bad username or password.</h3>'if __name__ == '__main__':    app.run()

处理了登陆的url和登陆后处理以及进入主页的请求

在这个基础上我们还可以添加很多的内容,比如前面用来hashlib加密,我们就可以在这里添加register的内容进行注册,然后将注册成功的信息传送到后台,我们存储起来(可以加入sql的内容)

==========================================

当然我们不可能完全用字符串表示html,所以需要使用模板,python自带jinja2模板.注意使用模板要建立一个templates文件夹,然后在里面建立html文件,用{{var}}表示传入的变量,{%xxx%}表示命令

from flask import Flask,request,render_template#from jinja2 import Environment, PackageLoaderapp = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def home():    return '<h1>hello</h1>'@app.route('/signin', methods=['GET'])def signin_form():    return render_template('form.html')@app.route('/signin', methods=['POST'])def signin():    # 需要从request对象读取表单内容:    if request.form['username']=='admin' and request.form['password']=='password':        print(render_template('home.html',username = request.form['username']))        return render_template('home.html',username = request.form['username'])    return (render_template('form.html',message = 'Bad username or password'))if __name__ == '__main__':    app.debug = True    app.run()

form.html

<html><head>    Please Sign in</head><body>    {%if message %}        <p style="color:red">{{ message }}</p>    {%endif%}    <form action="/signin" method="post">        <p><input name="username"></p>        <p><input name="password" type="password"></p>        <p><button type="submit">Sign In</button></p>    </form></body></html>

home.html

<!DOCTYPE HTML><html><head>  <title>Welcome, {{ username }}</title></head><body>  <img src = ./static/test.PNG>  <p>Welcome, {{ username }}!</p></body></html>

注意,图片等本地资源必须要使用相对路径,使用物理路径是不能被识别的!!!!!这个问题搞了我3个小时………

0 0
原创粉丝点击