2017-07-04 30 views
0

私はフラスコに新しく、それを知るためのマイクロブログアプリケーションを作成しています。 問題が発生しました。新規ユーザーの登録の詳細がデータベースに書き込まれていません。 誰かが私を助けることができますか?フォームからSQLAlchemyデータベースにデータを書き込む

ハーズの私の見解機能:

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> 

+0

そして、何が問題なのですか? –

+0

フォームデータがデータベースに書き込まれていません。 –

答えて

0

私はコメントできませんが、コードを変更した可能性はありますか?私は、レビューが必要だと考えています。たとえば、フォームの登録 'とビュー内の要素間のマッピングは、最大追加していないようです:

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

だけでなく、ビュー内の参照ではなく、REGの「REGISTER」を指すように思える:

なぜそれが私のため不明であった

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

:あなたのコードを通過する際に迅速な変更は私がボタンのコードを変更して

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

はまた、私はまた、テンプレート内のボタンを変更しましたそこにユーザーページへのリンクを配置しました(あなたのビューにリダイレクトを使用中):

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

ありがとう。 HTMLのユーザーページへのリンクが主な原因でした。 私は比較的プログラミングに新しいので、私はこれらのタイプの間違いをする傾向があります。 あなたは大きな助けになりました。 –

関連する問題