Найти - Пользователи
Полная версия: flask из формы в базу данных
Начало » Web » flask из формы в базу данных
1
qq.nix9
models
[code python
from app import db

class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
nickname = db.Column(db.String(64), unique = True)
password = db.Column(db.String(64))
def __repr__(self):
return ‘<User %r>’ % (self.nickname)
]

forms

__author__ = 'qq'
from flask.ext.wtf import Form
from wtforms import StringField, BooleanField, PasswordField, validators
from wtforms.validators import DataRequired
class RegForm(Form):
    nickname = StringField('user', validators = [DataRequired()])
    password = StringField('password', validators = [DataRequired()])

views

from flask import render_template, flash, redirect, request
from app import app, db
from forms import LoginForm, RegForm
from models import User
@app.route('/reg', methods=['GET','POST'])
def reg():
    form = RegForm(request.form)
    if form.validate_on_submit():
        u = User(nickname=form.nickname.data, password=form.password.data)
        db.session.add(u)
        db.session.commit()
        flash('tnx')
    else:
        flash('BAD validate')
    return render_template("reg.html", form = form)

reg gtml
{% block content %}

<h1>Reg</h1>
<form action="" method="post" name="reg">
<p>{{ form.nickname }} username</p>
<p>{{ form.password }} pass</p>
<p><input type="submit" value="reg"></p>
</form>
{% endblock %}

Не получается записать данные с формы в базу данных ( просто ничего не происходит, направьте на путь истинный
qq.nix9
если изменить функцию на такую :

@app.route('/reg', methods=['GET','POST'])
def reg():
    form = RegForm(request.form)
    u = User(nickname=form.nickname.data, password=form.password.data)
    db.session.add(u)
    db.session.commit()
    flash('tnx')
    return render_template("reg.html", form = form)

То все хорошо, но как проверять поля ?
4kpt_II
Если Вы делаете форму как слепок от модели БД да еще и в алхимии, то проще использовать sqlalchemy-wtforms. По Вашему вопросу. Если нет ajax, то неверный шаблон. Куда Вы данные с формы передаете?
qq.nix9
Я просто взял первое что в голову пришло, чтобы вообще попробовать. Это мой почти первый опыт программирования, я учусь как бы. Спасибо про sqlalchemy-wtforms. а если не слепок бд ? т.е. данные с формы надо будет прокрутить как то и записать результаты\расчеты в бд ? читал мега учебник фласк. в общем виде понял. Но там совсем тонкие моменты и принципы типа куда передать не раскрыты\либо я не увидел.
qq.nix9
где можно найти найти корректный шаблон для решения этой задачи?
qq.nix9
Изменил на такое, получаю в браузере при отправке формы
Bad Request

The browser (or proxy) sent a request that this server could not understand.


Form
from flask.ext.wtf import Form
from wtforms import StringField, BooleanField, PasswordField
from wtforms.validators import DataRequired, Required
class RegForm(Form):
    nickname = StringField('nickname', validators = [DataRequired()])
    password = StringField('password', validators = [DataRequired()])

View

from flask import render_template, flash, redirect, request
from app import app, db
from forms import LoginForm, RegForm
from models import User
@app.route('/reg', methods=['GET','POST'])
def reg():
    form = RegForm(request.form)
    if request.method == 'POST':
        nickname = request.form['nickname']
        password = request.form['pass']
        u = User(nickname, password)
        db.session.add(u)
        db.session.commit()
        flash('tnx')
    else:
        flash('BAD validate')
    return render_template("reg.html", form = form)
qq.nix9
Видимо я уже ближе к истине:::

def reg():
    form = RegForm()
    if form.validate_on_submit():
        u = User(nickname=form.nickname, password=form.password)
        db.session.add(u)
        db.session.commit()
        flash('tnx')
    else:
        flash('BAD validate')
    return render_template("reg.html", form = form)

Но получаю такую ошибку :
InterfaceError: (InterfaceError) Error binding parameter 0 - probably unsupported type. u'INSERT INTO user (nickname, password) VALUES (?, ?)' (<wtforms.fields.core.StringField object at 0x2ff9890>, <wtforms.fields.core.StringField object at 0x2ff9950>)
4kpt_II
Киньте скайп в личку. Все покажу и объясню.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB