将数据从表单写入 SQLAlchemy 数据库

writing data from forms to a SQLAlchemy database

刚接触flask,做个微博应用了解一下。 我有一个问题,新用户的注册详细信息没有写入数据库。 有人可以帮助我吗?

她的我的观点功能:

from app import app,db
from .forms import LoginForm,Register
from flask import render_template,session,redirect,url_for
from flask_login import login_user, logout_user, current_user, 
login_required
@app.route('/')
@app.route('/index')
def index():
    return render_template('index.html')

@app.route('/login',methods=['GET','POST'])
def login():
    form=LoginForm()
    return render_template('login.html',
                            title='Sign In',
                            form=form)
@app.route('/user',methods=['GET','POST'])
def user():
    return render_template('user.html')


@app.route('/register',methods=['GET','POST'])
def registration():
    reg=Register()
    if reg.validate_on_submit():
        u=User()
        u.username=register.username.data
        u.First_name=register.First_name.data
        u.Last_name=register.Last_name.data
        u.password=register.password.data
        u.email=register.email.data
        db.session.add(u)
        db.session.commit()
        return redirect(url_for('index'))

    return render_template('register.html',
                            title='New Registration',
                            register=reg)

这是我的模型:

from app import db

class User(db.Model):
    id=db.Column(db.Integer, primary_key=True)
    username=db.Column(db.String(32),index=True,unique=True)
    First_name=db.Column(db.String(32))
    Last_name=db.Column(db.String(32))
    password=db.Column(db.String(32))
    email=db.Column(db.String(20))
    posts=db.relationship('Post',backref='author',lazy='dynamic')

    def get_id(self):
        try:
            return unicode(self.id)  # python 2
        except NameError:
            return str(self.id)      #python 3

class Post(db.Model):
    id=db.Column(db.Integer,primary_key=True)
    body=db.Column(db.String(300))
    timestamp=db.Column(db.DateTime)
    user_id=db.Column(db.Integer,db.ForeignKey(User.id))

forms.py

from flask_wtf import Form
from wtforms import StringField,BooleanField,PasswordField,validators


class LoginForm(Form):
    username=StringField('username',[validators.DataRequired()])
    password=PasswordField('password',[validators.DataRequired()])
    remember_me=BooleanField('remember me',default=False)

class Register(Form):
    first_name=StringField('f_name',[validators.DataRequired(message=None)])
    last_name=StringField('l_name',[validators.DataRequired(message=None)])
    email=StringField('email',[validators.Email(message='Enter a valid Email ID')])
    password=PasswordField('reg_password',[validators.Length(min=8,max=20)])
    username=StringField('u_name',[validators.DataRequired(message=None)])
    confirm_password=PasswordField('c_password',[validators.DataRequired(),validators.EqualTo('password',message='passwords should match')])    

注册页面模板如下:

<form action="" method="post" name="Login">
{{ register.hidden_tag() }}
<h1>New Registration</h1>
<p>First Name: {{ register.first_name }}</p>
<p>Last Name: {{ register.last_name}}</p>
<p>email:{{ register.email }}</p>
<p>username: {{register.username}}</p>
<p>Password:{{register.password}}</p>
<p>Password:{{register.confirm_password}}</p>
<p type="submit"><a href='/user' value="Register">Register</a></p>

我无法发表评论,但您是否对代码进行了很多更改?我认为有必要进行审查。例如,表单 'register' 中的元素与视图之间的映射似乎不一致:

u.First_name=register.First_name.data
...
first_name=StringField('f_name',[validators.DataRequired(message=None)])

而且视图中的引用似乎指向 'register' 而不是 reg:

reg=Register()
if reg.validate_on_submit():
    u=User()
    u.username=register.username.data

此外,在查看您的代码时,我还对模板中的按钮进行了更改,作为快速更改,我更改了以下按钮的代码:

<button type="submit">register</button>

我不清楚你为什么将 link 放置到那里的用户页面(同时在你的视图中使用重定向):

<p type="submit"><a href='/user' value="Register">Register</a></p>