python flask 使用

Django 和 Flask对照
在这里插入图片描述

常用方法包

from flask import Flask,render_template,flash,request,abort

g 和session

session 是可以跨 request 使用的,session 的数据是经过加密后存储在 cookie 里的,用户每次 request 都会把这些 cookie 信息发回来,从而实现跨 request 使用。
g 是面向单个 request 的,一个 request 处理完,g 里的东西就没啦。(注意,这里说的 request 不是指 request context,从 0.10 版本开始,g 已经是面向 app context 了。这里写面向单个 request 是为了帮助提问者理解问题中提到的区别,仅考虑在 web 下的场景。)

hello world

在这里插入图片描述

from flask import  Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'hello world'
if __name__ == '__main__':
    app.run(port=8080)  //运行端口

请求类型和参数传递
方式一:
@app.route('/hello/<id>',methods = ['GET'])
def hello_world(id):
    return 'hello:'+id

方式二:
http://127.0.0.1:5000/hello?id=1

from flask import  Flask,request
@app.route('/hello')
def hello_world():
	id = request.args.get('id')
	return 'hello:'+id
反向路由
from flask import Flask,request,url_for
@app.route('/test')
def query_user():
''' http://127.0.0.1:5000/test?id=123 '''
	id = request.args.get('id')
	return 'query user:'+id

@app.route('/query_url')
def query_url():
''' 反导出 query_user函数名对应的url地址 '''
	return 'query url:'+url_for('query_user')
模板base

models.py

class User(object):
	def __init__(self,user_id,user_name):
		self.user_id = user_id
		self.user_name = user_name

user_index.html 必须放在templates文件夹下

<body>
//正常获取
<h1>hello {{user.user_name}}</h1>
//条件判断
{% if user %}
        hello {{user.user_name}}
{% else %}
        no this user
{% endif %}
//循环
{% for user in users%}
    {{user.user_name}}
{% endfor %}
</body>

主程序

@app.route('/user')
def user_inde():
	user = User(1,'jike')
	return render_template('user_index.html', user=user)
模板的继承

base.html

<div>
    <h1>Heard jinke</h1>
</div>
    {% block content %}  //预定可变的内容
    {% endblock %}
<div>
    <h1>footer jinke</h1>
</div>

one_base.html

{% extends "base.html"%}
    {% block content %}
        <h2> extend 1</h2>  //具体内容1
    {% endblock %}

two_base.html

{% extends "base.html"%}
    {% block content %}
        <h2> extend 2</h2>  //具体内容二
    {% endblock %}
消息提示

主程序:

app.secret_key = '123'
@app.route('/')
def index():
    flash('this is message')
    return render_template('index.html')
index.html

<body>
{{get_flashed_messages()[0]}}
</body>

处理404等异常

@app.errorhandler(404)
def not_found(e):
    return render_template('404.html')

抛出异常:

from flask import  Flask,render_template,flash,request,abort



@app.route('/thow404')
def thow404():
    abort(404)  //抛出异常

实现加法计算

在这里插入图片描述

<div align="center" style="margin-top:40px">
<img src="{{url_for('static',filename='add.png')}}"><br>
</div>
<div align="center" style="margin-top:60px">
   <form name="form1" method='POST'>
         <input type="text" placeholder="加数" name="adder1" class="form-control" value="{{adder1}}">
         +
         <input type="text" placeholder="被加数" name="adder2"  class="form-control" value="{{adder2}}">
         =
         <input type="text" placeholder="总数" name="sum" readonly="readonly" class="form-control" value="{{message}}">
      <input type="submit" class="btn btn-lg btn-info" value="计算">
   </form>
</div>

index.py

from flask import Flask,render_template,redirect,url_for,request

app=Flask(__name__)

@app.route('/')
def index():
   return redirect(url_for('add'))

@app.route('/add',methods=['GET','POST'])
def add():
   if request.method =="POST":
      a=request.form['adder1']
      b=request.form['adder2']
      a=int(a)
      b=int(b)
      sum=a+b
      return render_template('index.html',adder1=str(a),adder2=str(b),message=str(sum))
   return render_template('index.html')

if __name__=='__main__':
   app.run(port=8080)


Flask-wtf表单生成

main.py

from flask import Flask,request,render_template,redirect
from wtforms import Form,TextField,PasswordField,validators
app=Flask(__name__)
class LoginForm(Form):
    username = TextField("username",[validators.Required()])
    password = PasswordField("password",[validators.Required()])

@app.route("/user",methods=['GET','POST'])
def login():
    myForm = LoginForm(request.form)
    if request.method=='POST':
        if myForm.username.data=="jikexueyuan" and myForm.password.data=="123456" and myForm.validate():
            return redirect("http://www.jikexueyuan.com")
        else:
            message="Login Failed"
            return render_template('index.html',message=message,form=myForm)
    return render_template('index.html',form=myForm)

if __name__=="__main__":
    app.run(port=8080)

templates/index.html

<h1>User Management</h1>
    {% if message %} {{message}} {% endif %}
    <form method="post">
        Username :{{form.username}}
        <br/>
        Password :{{form.password}}
        <br/>
        <input type="submit" value="Submit" />
        <input type="reset" value="reset" />
    </form>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值