Mar*_*oes 9 flask-sqlalchemy flask-restless
我是python的新手,我刚刚学会了如何使用flask restless和flask sql-alchemy创建一个api.但是我想用随机值为数据库播种.我该如何实现这一目标?请帮忙.这是api代码......
import flask
import flask.ext.sqlalchemy
import flask.ext.restless
import datetime
DATABASE = 'sqlite:///tmp/test.db'
#Create the Flask application and the FLask-SQLALchemy object
app = flask.Flask(__name__)
app.config ['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE
db = flask.ext.sqlalchemy.SQLAlchemy(app)
#create Flask-SQLAlchemy models
class TodoItem(db.Model):
id = db.Column(db.Integer, primary_key = True)
todo = db.Column(db.Unicode)
priority = db.Column(db.SmallInteger)
due_date = db.Column(db.Date)
#Create database tables
db.create_all()
#Create Flask restless api manager
manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db = db)
#Create api end points
manager.create_api(TodoItem, methods = ['GET','POST','DELETE','PUT'], results_per_page = 20)
#Start flask loop
app.run()
Run Code Online (Sandbox Code Playgroud)
我有一个类似的问题并做了一些研究,发现了一些有用的东西。
我看到的模式是基于注册瓶CLI自定义命令,喜欢的东西:flask seed。
鉴于您的示例,这看起来像这样。首先,将以下内容导入您的 api 代码文件(假设您将其命名为server.py):
from flask.cli import with_appcontext
Run Code Online (Sandbox Code Playgroud)
(我看到你这样做,import flask但我只想补充你应该将这些更改为from flask import what_you_need)
接下来,创建一个为您的项目做种子的函数:
@with_appcontext
def seed():
"""Seed the database."""
todo1 = TodoItem(...).save()
todo2 = TodoItem(...).save()
todo3 = TodoItem(...).save()
Run Code Online (Sandbox Code Playgroud)
最后,在您的 Flask 应用程序中注册这些命令:
def register_commands(app):
"""Register CLI commands."""
app.cli.add_command(seed)
Run Code Online (Sandbox Code Playgroud)
配置register_commands完应用程序后,请确保调用以注册命令:
register_commands(app)
Run Code Online (Sandbox Code Playgroud)
在这一点上,你应该能够运行:flask seed。您可以flask reset使用相同的模式添加更多功能(可能是 a )。
来自另一个新手,forgerypy和 forgerypy3 库可用于此目的(尽管它们看起来好像没有被触及过)。
通过将它们添加到模型中来使用它们的简单示例:
class TodoItem(db.Model):
....
@staticmethod
def generate_fake_data(records=10):
import forgery_py
from random import randint
for record in records:
todo = TodoItem(todo=forgery_py.lorem_ipsum.word(),
due_date=forgery_py.date.date(),
priority=randint(1,4))
db.session.add(todo)
try:
db.session.commit()
except:
db.session.rollback()
Run Code Online (Sandbox Code Playgroud)
然后,您可以在 shell 会话中调用generate_fake_data 方法。
Miguel Grinberg 的 Flask Web Development(O'Reilly 的书,不是博客)的第 11 章是这方面的一个很好的资源。
| 归档时间: |
|
| 查看次数: |
2945 次 |
| 最近记录: |