1. app
from flask import Flask, current_app, redirect, url_for
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route("/login")
def login():
url = url_for("hello_world")
return redirect(url)
if __name__ == '__main__':
print (app.url_map)
app.run(debug=True)
2. url
from flask import Flask, current_app, redirect, url_for
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route("/post_only", methods=["GET","POST"])
def post_only():
return "post only page"
@app.route("/hello", methods=["POST"])
def hello():
return "hello 1"
@app.route("/hello", methods=["GET"])
def hello2():
return "hello 2"
@app.route("/hi1")
@app.route("/hi2")
def hi():
return "hi page"
@app.route("/login")
def login():
url = url_for("hello_world")
return redirect(url)
if __name__ == '__main__':
print (app.url_map)
app.run(debug=True)
3. request
from flask import Flask, request
app = Flask(__name__)
@app.route("/index", methods=["GET", "POST"])
def index():
age = request.form.get("age", "23")
name = request.form.get("name", "zhangsan")
city = request.args.get("city")
name_list = request.form.getlist("name")
print (request.data)
return "hello name=%s, age=%s, city=%s, name=%s" % (name, age, city, name_list)
if __name__ == "__main__":
app.run(debug=True)
4. response
from flask import Flask, request, abort, Response, make_response
app = Flask(__name__)
@app.route("/index", methods=["GET"])
def index():
resp = make_response("index page 2")
resp.status = "999 itcast"
resp.headers['city'] = "sz"
return resp
if __name__ == "__main__":
app.run(debug=True)
4. upload_file
from flask import Flask, request
app = Flask(__name__)
@app.route("/upload", methods=["POST"])
def upload():
"""接收前端传送过来的文件"""
file_obj = request.files.get("pic")
if file_obj is None:
return "未上传文件"
file_obj.save("./demo1.jpg")
return "上传成功"
if __name__ == "__main__":
app.run(debug=True)
5. cookie
import json
from flask import Flask, make_response, request
app = Flask(__name__)
@app.route("/set_cookie")
def set_cookie():
resp = make_response("success")
resp.set_cookie("Itcast", "Python")
resp.set_cookie("Itcast1", "Python1")
resp.set_cookie("Itcast2", "Python2", max_age=3600)
return resp
@app.route("/get_cookie")
def get_cookie():
c = request.cookies.get("Itcast2")
return c
@app.route("/delete_cookie")
def delete_cookie():
resp = make_response("del success")
resp.delete_cookie("Itcast2")
return resp
if __name__ == "__main__":
app.run(debug=True)
6. session
import json
from flask import Flask, session
app = Flask(__name__)
app.config["SECRET_KEY"] = "SFJKDFSSDKJEGF"
@app.route("/login")
def login():
session["name"] = "python"
session["mobile"] = "18697118727"
return "login success"
@app.route("/index")
def index():
name = session.get("name")
return "hello %s" % name
if __name__ == "__main__":
app.run(debug=True)
7. templates
import json
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/index")
def delete_cookie():
data = {
"name": "python",
"age": 18,
"my_dict": {"city": "sz"},
"my_list": [1, 2, 3, 4, 5],
"my_int": 0
}
return render_template("index.html", **data)
if __name__ == "__main__":
app.run(debug=True)
8. jsonify
import json
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/index", methods=["GET"])
def index():
data = {
"name": "python",
"age": 18
}
return jsonify(city="sz", country="china")
if __name__ == "__main__":
app.run(debug=True)
9. abort
from flask import Flask, request, abort, Response
app = Flask(__name__)
@app.route("/login", methods=["GET"])
def login():
uname = ""
upwd = ""
if uname != "zhangsan" and upwd != "admin":
abort(404)
return "login success"
@app.errorhandler(404)
def handle_404_error(err):
"""自定义的处理错误方法"""
return u"出现了404错误,错误信息:%s" % err
if __name__ == "__main__":
app.run(debug=True)
10. converter
from flask import Flask, current_app, redirect, url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
@app.route("/goods/<goods_id>")
def goods(goods_id):
"""定义的视图函数"""
return "goods detail page %s" % goods_id
class MobileConverter(BaseConverter):
def __init__(self, url_map):
super(MobileConverter,self).__init__(url_map)
self.regex = r"1[34578]\d{9}"
class RegexConverter(BaseConverter):
"""自定义转换器类"""
def __init__(self, url_map, regex):
super(RegexConverter,self).__init__(url_map)
self.regex = regex
def to_python(self, value):
print ("to_pathon方法被调用")
return value
def to_url(self, value):
"""使用url_for的方法的时候被调用"""
return value
app.url_map.converters["re"] = RegexConverter
app.url_map.converters["mobile"] = MobileConverter
@app.route("/send/<re(r'1[34578]\d{9}'):mobile_num>")
def send_sms(mobile_num):
return "send sms to %s" % mobile_num
@app.route("/index")
def index():
url = url_for("send_sms",mobile_num="18912345678")
return redirect(url)
if __name__ == '__main__':
print (app.url_map)
app.run(debug=True)
11. SQLAlchemy
from flask import Flask, render_template, request, redirect, url_for, jsonify
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
import pymysql
from flask_sqlalchemy import SQLAlchemy
pymysql.install_as_MySQLdb()
app = Flask(__name__)
class Config(object):
SQLALCHEMY_DATABASE_URI = "mysql://root:admin123@localhost:3306/author_book"
SQLALCHEMY_TRACK_MODIFICATIONS = True
SECRET_KEY = "DFDSGFGdsgfsgsg"
app.config.from_object(Config)
db = SQLAlchemy(app)
manager = Manager(app)
Migrate(app,db)
manager.add_command('db', MigrateCommand)
class Author(db.Model):
"""作者"""
__tablename__ = "tbl_authors"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
email = db.Column(db.String(32), unique=True)
books = db.relationship('Book', backref="author")
def __repr__(self):
return '<Author %r>' % self.name
class Book(db.Model):
"""书籍"""
__tablename__ = "tbl_books"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64),unique=True)
author_id = db.Column(db.Integer, db.ForeignKey('tbl_authors.id'))
def __repr__(self):
return '<Book %r>' % self.name
class AuthorBookForm(FlaskForm):
"""作者数据表单模型类"""
author_name = StringField(label=u"作者", validators=[DataRequired(u"作者必填")])
book_name = StringField(label=u"书籍", validators=[DataRequired(u"书籍必填")])
submit = SubmitField(label=u"保存")
@app.route("/", methods=['POST', 'GET'])
def index():
form = AuthorBookForm()
if form.validate_on_submit():
author_name = form.author_name.data
book_name = form.book_name.data
author = Author.query.filter_by(name=author_name).first()
if not author:
author = Author(name=author_name)
db.session.add(author)
db.session.commit()
book = Book.query.filter_by(name=book_name).first()
if not book:
book = Book(name=book_name, author_id=author.id)
db.session.add(book)
db.session.commit()
authors = Author.query.all()
return render_template("author_book.html", authors=authors, form=form)
@app.route("/delete_book", methods=['POST'])
def delete_book():
"""删除数据"""
req_dict = request.get_json()
book_id = req_dict.get("book_id")
book = Book.query.get(book_id)
db.session.delete(book)
db.session.commit()
return jsonify(code=0, message='OK')
if __name__ == "__main__":
manager.run()
python 模块名.py db init
python 模块名.py db migrate -m "备注信息"
python 模块名.py db upgrade
python 模块名.py db history
python 模块名.py db downgrade 要退回版本状态码
12. 模块测试
登录
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/login", methods=["POST"])
def login():
uname = request.form.get("uname")
upwd = request.form.get("upwd")
if not all([uname, upwd]):
resp = {
"code": 1,
"message": "invalid params"
}
return jsonify(resp)
if uname == "admin" and upwd == "python":
resp = {
"code": 0,
"message": "login success"
}
return jsonify(resp)
else:
resp = {
"code": 2,
"message": "wrong uname or upwd"
}
return jsonify(resp)
if __name__ == "__main__":
app.run(debug=True)
测试
import unittest
from login import app
import json
class LoginTest(unittest.TestCase):
"""构造单元测试案例"""
"""构造单元测试案例"""
def setUp(self):
"""在测试之前,先被执行"""
app.testing = True
self.client = app.test_client()
def test_empty_user_name_password(self):
"""测试用户名密码不完整的情况"""
ret = self.client.post('/login', data={})
resp = ret.data
resp = json.loads(resp)
self.assertIn("code", resp)
self.assertEquals(resp['code'], 1)
ret = self.client.post('/login', data={"upwd": "python"})
resp = ret.data
resp = json.loads(resp)
self.assertIn("code", resp)
self.assertEquals(resp['code'], 1)
ret = self.client.post('/login', data={"uname": "admin"})
resp = ret.data
resp = json.loads(resp)
self.assertIn("code", resp)
self.assertEquals(resp['code'], 1)
def test_wrong_user_name_password(self):
"""测试用户名或密码错误"""
ret = self.client.post("/login",data={"uname": "iydsff", "upwd": "iughf"})
resp = ret.data
resp = json.loads(resp)
self.assertIn("code", resp)
self.assertEquals(resp['code'], 2)
ret = self.client.post("/login", data={"uname": "iydsff", "upwd": "python"})
resp = ret.data
resp = json.loads(resp)
self.assertIn("code", resp)
self.assertEquals(resp['code'], 2)
ret = self.client.post("/login", data={"uname": "admin", "upwd": "sfdf"})
resp = ret.data
resp = json.loads(resp)
self.assertIn("code", resp)
self.assertEquals(resp['code'], 2)
def test_wright_user_name_password(self):
""""测试用户名或密码错误"""
ret = self.client.post("/login", data={"uname": "admin", "upwd": "python"})
resp = ret.data
resp = json.loads(resp)
self.assertIn("code", resp)
self.assertEquals(resp['code'], 0)
if __name__ == "__main__":
unittest.main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)