将数据从表单写入 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>
刚接触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>