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

时间:2017-07-04 14:16:18

标签: python flask flask-sqlalchemy flask-wtforms

我是新手,并制作微博应用程序来了解它。 我遇到了问题,新用户的注册详细信息没有写入数据库。 有人能帮助我吗?

她的观点功能:

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>

1 个答案:

答案 0 :(得分:0)

我无法发表评论,但您是否可能在代码中进行了大量更改?我认为有必要进行审查。例如,表格中的元素之间的映射&#39;注册&#39;而且这个观点似乎并没有加起来:

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

但是视图中的引用似乎也指向“注册”&#39;而不是reg:

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

同样在浏览代码时,我也对模板中的按钮进行了更改,作为快速更改,我更改了按钮的代码:

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

我不明白为什么你在那里放置了一个链接到用户页面(在你的视图中使用重定向):

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