Что вы ищете, это встроенная ORM SQLAlchemy для создания форм из моделей или интегрированных в базу данных. Существуют и другие возможности для преодоления ограничений Flask ORM, когда это необходимо. Ниже приведен пример, который даст вам некоторую ясность.
from flask import Flask, render_template, redirect, flash
from flask.wtf import Form
from flask.ext.sqlalchemy import SQLAlchemy
from wtf.ext.sqlalchemy.orm import model_form
app=Flask(__app__)
app.config['SECRET_KEY'] = 'secret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/employees.sqlite'
app.config['SQLALCHEMY_ECHO'] = True
# Here you initiate the ext
db=SQLAlchemy(app)
#Let's define a model
class Employee(db.Model)
__tablename__ = 'employee'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False
birthday = db.Column(db.Date, nullable=False
def __repr__(self):
return 'employee %s' %self.name
# Now go to your shell inside your env not in gloabal shell outside your env and run this command.
# From your .py file where you've created all above configration first make an import to db from shell
from file.py import db
#Then create a database with following command in shell
db.create.all()
#Your auto generated database based form below
EmployeeForm() = model_form(Employee, base_class=Form, field_args{'name':{'class':'employee'}})
#Let's create a view with model_form or database based form in your case.
@app.route('/', methods=['GET', 'POST'])
def index()
#request.POST does same in Django or any other Python based web framework like Bottle, Tornado etc
form = EmployeeForm()
try:
if form_validate_on_submit():
employee=Employee() #load the model values
form.populate_obj(Employee) #populates the form with respective values
db.session.add(employee) #gathers the session based data to be added in DB
db.session.commit() #Adds data to DB
flash('New Employee added to database successfully.') #Display a message to end user at front end.
retrun redirect('/') # redirects upon success to your homepage.
except Exception e:
# logs the errors
db.session.rollback()
flash('There was a problem registering new employee. Please contact the site administrator at [email protected]')
employee_list = Employe.query.all() #equailent to django style "item.objects.all() to show list of all existing items.
return render_template('index.html', form=form, employee_list=employee_list)
В последней строке выше вы сделали три вещи. Вы получили переменную или переменную переменной формы, как в Django, как "form"
, так что ваш конечный пользователь может ввести данные. Затем у вас есть данные модели, сохраненные в db как "employee_list=employee_list"
, которые покажут весь список конечным пользователям. "flash"
как Django обмен сообщениями.
Теперь для нескольких вариантов его модель имеет то же самое, что и аргумент выбора djagno для ключевого значения, как показано ниже: По моему опыту я предлагаю вам установить «peewee» простой ORM для связанных с Python баз данных.
choices = (('key', 'value')('key', 'value'))
employee_type = db.Model(db.String(90), choices=('key1', 'key2)
Надеюсь, это поможет.
Действительно хороший способ объяснить. Большое спасибо человеку, которого вы качаете !. –