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 '

Home

'
@app.route('/signin', methods=['GET']) def signin_form(): return '''

'''
@app.route('/signin', methods=['POST']) def signin(): # 需要从request对象读取表单内容: if request.form['username']=='admin' and request.form['password']=='password': return '

Hello, admin!

'
return '

Bad username or password.

'
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 '

hello

'
@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 Inbutton>p>
    form>
body>
html>

home.html


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

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

你可能感兴趣的:(Python)