flask复习笔记

flask复习笔记(简略版)

自己学着玩写的笔记,东西不全
可供有一点Python和web基础的同学快速入门或者复习用
部分代码来自菜鸟教程https://www.cainiaojc.com/flask/flask-tutorial.html
我只是总结概括了一下,感谢原作者

flask简介

Flask是轻量级Python Web 应用框架,基于Werkzeug WSGI工具包和Jinja2模板引擎。通常被称为微框架,它旨在保持应用程序的核心简单且可扩展。

一些配置问题

先得安装下Flask,pip会自动安装相关的其他包

flask项目的格式

# 导包
from flask import Flask
# 创建Flask对象
app = Flask(__name__)
# 路由装饰器
@app.route('/')
def hello_world():
    return 'Hello World'

#下面是两个带参数的url
@app.route('/hello/<name>')
def hello_name(name):
    return 'Hello %s!' % name
@app.route('/blog/<int:postID>')
def show_blog(postID):
    return 'Blog Number %d' % postID

# 启动从这里开始,参数还有个option不过现在没啥用
if __name__ == '__main__':
   app.run(host='127.0.0.1', port='5000', debug=True)

url_for 的使用

@app.route('/guest/<guest>')
 def hello_guest(guest):
     return 'Hello %s as Guest' % guest
 @app.route('/user/<name>')
 def user(name):
     if name =='admin':
         return redirect(url_for('hello_admin'))
     else:
         return redirect(url_for('hello_guest',guest = name))
#注意第一个参数'hello_guest'是函数名,后面的guest=name是url后缀参数

在html中使用:

<a href = "{{ url_for('login') }}">

渲染_模板 render_template模块

它可以利用Jinja2模板引擎技术,而不需要从函数返回硬编码HTML。如下代码所示,可以通过render_template()函数渲染HTML文件。

注意html文件要放在/templates文件夹下面

#这两个是一样的,一般用后者啦
@app.route('/hello')
def index():
    return '<html><body><h1> Hello World </h1></body></html>'
@app.route('/hello.html')
def index():
    return render_template('hello.html')

Jinja2模板引擎使用以下分隔符来从HTML转义。
{% … %} 用于多行语句
{{ … }} 用于将表达式打印输出到模板
{# … #} 用于未包含在模板输出中的注释

render_template可以向html中传递参数:

 @app.route('/hello/<int:score>')
 def hello_name(score):
     return render_template('hello.html', marks = score)
{% if marks>50 %}
       <h1> 通过考试!</h1>
       {% else %}
       <h1>未通过考试!</h1>
       {% endif %}

传输字典并使用for循环打印:

@app.route('/result')
 def result():
     dict = {'phy':59,'che':60,'maths':90}
     return render_template('result.html', result = dict)
<table border = 1>
    <-->注意item后面的括号!!</-->
          {% for key, value in result.items() %}
             <tr>
                <th> {{ key }} </th>
                <td> {{ value }} </td>
             </tr>
          {% endfor %}
       </table>

表单处理

from flask import Flask, render_template, request
 app = Flask(__name__)
 @app.route('/')
 def student():
     return render_template('student.html')
 @app.route('/result',methods = ['POST', 'GET'])
 def result():
     if request.method == 'POST':
         result = request.form
         return render_template("result.html",result = result)
 if __name__ == '__main__':
     app.run(debug = True)
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask示例</title>
 </head>
    <body>
       <form action = "http://localhost:5000/result" method = "POST">
          <p>姓名 <input type = "text" name = "Name" /></p>
          <p>物理分数: <input type = "text" name = "Physics" /></p>
          <p>化学分数: <input type = "text" name = "Chemistry" /></p>
          <p>数学分数: <input type ="text" name = "Mathematics" /></p>
          <p><input type = "submit" value = "提交" /></p>
       </form>
    </body>
 </html>
result.html
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask示例</title>
 </head>
    <body>
       <table border = 1>
          {% for key, value in result.items() %}
             <tr>
                <th> {{ key }} </th>
                <td> {{ value }} </td>
             </tr>
          {% endfor %}
       </table>
    </body>
 </html>

cookie和session

cookie:

from flask import make_response,request,render_template,Flask
 app = Flask(__name__)
 @app.route('/')
 def index():
     return render_template('index.html')
 @app.route('/setcookie', methods = ['POST', 'GET'])
 def setcookie():
     if request.method == 'POST':
         user = request.form['name']
         resp = make_response(render_template('readcookie.html'))
         resp.set_cookie('userID', user)
         return resp
 @app.route('/getcookie')
 def getcookie():
     name = request.cookies.get('userID')
     print (name)
     return '<h1>welcome, '+name+'</h1>'
 if __name__ == '__main__':
     app.run(debug = True)

session:使用session登录

from flask import *
app = Flask(__name__)
#这个secret_key一定要有,但是目前不知道有什么用
app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'
@app.route('/')
def index():
     if 'username' in session:
         username = session['username']
         return '登录用户名是:' + username + '<br>' + \
                  "<b><a href = '/logout'>点击这里注销</a></b>"
     return "您暂未登录, <br><a href = '/login'></b>" + \
          "点击这里登录</b></a>"

#登录
@app.route('/login', methods = ['GET', 'POST'])
def login():
     if request.method == 'POST':
         session['username'] = request.form['username']
         return redirect(url_for('index'))
     return '''
    <form action = "" method = "post">
       <p><input type ="text" name ="username"/></p>
       <p><input type ="submit" value ="登录"/></p>
    </form>
    '''

#退出登录
@app.route('/logout')
def logout():
    # remove the username from the session if it is there
    session.pop('username', None)
    return redirect(url_for('index'))

if __name__ == '__main__':
     app.run(debug = True)

重定向

#还是注意success是函数名
return redirect(url_for('success'))

闪现机制

#只有执行到这个的时候才会被传送到前端,可以写很多条
#注意是在跳转之前flash
flash('您已成功登录')
flash('You were successfully logged in')
return redirect(url_for('index'))
<-->对应的html代码块</-->
{% with messages = get_flashed_messages() %}
           {% if messages %}
             <ul class=flashes>
             {% for message in messages %}
               <li>{{ message }}</li>
             {% endfor %}
             </ul>
           {% endif %}
         {% endwith %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值