2017-02-01 6 views
2

Я новичок в Flask и немного запутался в моделировании базы данных. Пожалуйста, приносите мои извинения, если какой-либо смысл, это не вопрос, подходящий для публикации.Формы, основанные на базе данных в Flask

Мне нужно создать поле модели многопользовательской выборки в Flask, и мне нужно иметь доступ к нему с панели администратора, чтобы установить для нее значения. Он показывает параметры в документах с формами WTF для создания поля с несколькими вариантами. Я смущен тем, как создавать формы, привязанные к базе данных. Может кто-то очистить его для меня, потому что я пользователь Django, а в Django Forms и ModelForms имеют другой подход, поэтому пытаюсь понять, что бы это было в Flask. Как визуализировать бланки базы данных в Flask? Как создать поле для множественного выбора с созданной для него базой данных. Пожалуйста помоги.

ответ

2

Что вы ищете, это встроенная 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) 

Надеюсь, это поможет.

+0

Действительно хороший способ объяснить. Большое спасибо человеку, которого вы качаете !. –

 Смежные вопросы

  • Нет связанных вопросов^_^