Python学习:Flask框架和jinja2模板

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

from flask import Flask
from flask import request
app = 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, PackageLoader
app = 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个小时………

你可能感兴趣的:(Python学习:Flask框架和jinja2模板)