Flask WTForms данные не хранятся в базе данных с sqlalchemy - PullRequest
0 голосов
/ 12 апреля 2020

Я пытался сохранить входные данные пользователя в базе данных. Но каждый раз я терпел неудачу. Я использую FLASK WTForms для этого и postgreSQL для базы данных. Взгляните на мой код.

Когда вы нажмете кнопку «Отправить», он вернется на ту же страницу, и информация о пользователе не сохранится в базе данных. Но вручную, когда я хочу добавить информацию, она отлично хранит данные в базе данных. Вручную означает вставку информации в оболочку python.

>>> from app import db
>>> from app import Students
>>> db.create_all()
>>> info = Students(name="some name", father_name="his father", mother_name="his mother", care_of="father or house name", village="village name", post_office="post office name", upozilla="upozilla name", zilla="zilla name", birth_cirtificate_no="123456789")

>>> db.session.add(info)
>>> db.session.commit()

Это будет правильно работать в python оболочке. Прекрасно хранить в базе данных

Но эти файлы не хранят данные в базе данных

app.py файл

#   importing basic necessary file
from flask import Flask
from flask import render_template
from flask import redirect
from flask import url_for
from flask import request

#   import wtform for form validation
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms import PasswordField
from wtforms import SubmitField
from wtforms import BooleanField
from wtforms import SelectField
from wtforms import IntegerField
#   wtf validators
from wtforms.validators import DataRequired
from wtforms.validators import Length
from wtforms.validators import Email
from wtforms.validators import EqualTo
#   sqlalchemy for database management
from flask_sqlalchemy import SQLAlchemy


#   make a class for wtforms 
class AdmissionForm(FlaskForm):
    #   make a field for name
    name = StringField(
        'Full Name',
        validators = [
            DataRequired(),
            Length(min=3, max=50)
        ]
    )

    #   make field for father's name
    father_name = StringField(
        'Father\'s Name',
        validators = [
            DataRequired(),
            Length(min=3, max=50)
        ]
    )

    #   make a field for mother's name
    mother_name = StringField(
        'Mother\'s Name',
        validators = [
            DataRequired(),
            Length(min=3, max=50)
        ]
    )

    #   make a field for care of address
    care_of = StringField(
        'Care of',
        validators = [
            DataRequired(),
            Length(min=3, max=80)
        ]
    )

    #   make a field for village 
    village =  StringField(
        'Village/Town/House No',
        validators = [
            DataRequired(),
            Length(min=3, max=30)
        ]
    )

    #   make a field for post office
    post_office = StringField(
        'Post Office',
        validators = [
            DataRequired(),
            Length(min=4, max=30)
        ]
    )


    #   make a field for upozilla  
    upozilla = StringField(
        'Upozilla',
        validators = [
            DataRequired(),
            Length(min=3, max=30)
        ]
    )

    #   make a filed for zilla
    zilla = StringField(
        'Zilla',
        validators = [
            DataRequired(),
            Length(min=3, max=20)
        ]
    )

    #   make a text field for birth cirtificate id 
    birth_cirtificate_no  = IntegerField(
        'Birth Cirtificate No',
        validators = [
            DataRequired()
        ]
    )

    #   make a submit field
    submit = SubmitField('Submit')


#   pass this file in app variable
app = Flask(__name__)


#   genarate a secret key
app.config['SECRET_KEY'] = '248fb9a5bdffa13c0bc136504ebf75c2'


#   connecting database
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:test123@localhost/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False


#   pass this file into sqlalchemy
db = SQLAlchemy(app)

#   make a class for database
class Students(db.Model):
    id = db.Column( db.Integer, primary_key=True)
    name = db.Column( db.String(50), nullable=False)
    father_name = db.Column( db.String(50), nullable=False)
    mother_name = db.Column( db.String(50), nullable=False)
    care_of = db.Column( db.String(80), nullable=False)
    village = db.Column( db.String(30), nullable=False)
    post_office = db.Column( db.String(30), nullable=False)
    upozilla = db.Column( db.String(30), nullable=False)
    zilla = db.Column( db.String(20), nullable=False)
    birth_cirtificate_no = db.Column( db.String, nullable=False)

    def __init__(self, name, father_name, mother_name, care_of, village, post_office, upozilla, zilla, birth_cirtificate_no):
        self.name = name
        self.father_name = father_name
        self.mother_name = mother_name
        self.care_of = care_of
        self.village = village
        self.post_office = post_office
        self.upozilla = upozilla
        self.zilla = zilla
        self.birth_cirtificate_no = birth_cirtificate_no


#   default route of website
@app.route('/')
def index():
    return render_template('index.html')

#   admission route
@app.route('/admission', methods=['POST', 'GET'])
def admission():
    form = AdmissionForm()

    # every time this condition is skipped
    if form.validate_on_submit():
        name = form.name.data
        father_name = form.father_name.data
        mother_name = form.mother_name.data
        care_of = form.care_of.data
        village = form.village.data
        post_office = form.post_office.data
        upozilla = form.upozilla.data
        zilla = form.zilla.data
        birth_cirtificate_no = form.birth_cirtificate_no.data


        form.name.data = ''
        form.father_name.data = ''
        form.mother_name.data = ''
        form.care_of.data = ''
        form.village.data = ''
        form.post_office.data = ''
        form.upozilla.data = ''
        form.zilla.data = ''
        form.birth_cirtificate_no.data = ''


        print('First Name: ', name)


        data = Students(name, father_name, mother_name, care_of, village, post_office, upozilla, zilla, birth_cirtificate_no)
        db.session.add(data)
        db.session.commit()
        return redirect( url_for('academic') )
    # every time this condition is execute
    else:
        print("FORM ACCESS DENIED")

    return render_template('admission.html', form=form)



if __name__ == "__main__":
    app.debug = True
    app.run()

допуск. html файл

<form action="" method="post">
                {{ form.hidden_tag() }}

                <div class="form_input" id="name">
                    {{ form.name.label(class="form_label") }}

                    {% if form.name.errors %}
                        {{ form.name( class="form_textbox is-invalid" ) }}
                        <div class="invalid-feedback">
                            {% for error in form.name.errors %}
                                <span>  {{ error }}   </span>
                            {% endfor %}
                        </div>

                    {% else %}
                        {{ form.name( class="form_textbox" ) }}
                    {% endif %}
                </div>

                <div class="row">

                    <div class="form_input" id="father_name">
                        {{ form.father_name.label(class="form_label") }}

                        {% if form.father_name.errors %}
                            {{ form.father_name( class="form_textbox is-invalid" ) }}
                            <div class="invalid-feedback">
                                {% for error in form.father_name.errors %}
                                    <span>  {{ error }}   </span>
                                {% endfor %}
                            </div>

                        {% else %}
                            {{ form.father_name( class="form_textbox" ) }}
                        {% endif %}
                    </div>

                    <div class="form_input" id="mother_name">
                        {{ form.mother_name.label(class="form_label") }}

                        {% if form.mother_name.errors %}
                            {{ form.mother_name( class="form_textbox is-invalid" ) }}
                            <div class="invalid-feedback">
                                {% for error in form.mother_name.errors %}
                                    <span>  {{ error }}   </span>
                                {% endfor %}
                            </div>

                        {% else %}
                            {{ form.mother_name( class="form_textbox" ) }}
                        {% endif %}
                    </div>

                </div>

                <div class="row">

                    <div class="column" id="present_address">

                        <p class="input_title">
                            Present Address
                        </p>

                        <div class="form_input" id="care_of">
                            {{ form.care_of.label(class="form_label") }}

                            {% if form.care_of.errors %}
                                {{ form.care_of( class="form_textbox is-invalid" ) }}
                                <div class="invalid-feedback">
                                    {% for error in form.care_of.errors %}
                                        <span>  {{ error }}   </span>
                                    {% endfor %}
                                </div>

                            {% else %}
                                {{ form.care_of( class="form_textbox" ) }}
                            {% endif %}
                        </div>

                        <div class="form_input">
                            {{ form.village.label(class="form_label") }}

                            {% if form.village.errors %}
                                {{ form.village( class="form_textbox is-invalid" ) }}
                                <div class="invalid-feedback">
                                    {% for error in form.village.errors %}
                                        <span>  {{ error }}   </span>
                                    {% endfor %}
                                </div>

                            {% else %}
                                {{ form.village( class="form_textbox" ) }}
                            {% endif %}
                        </div>

                        <div class="form_input">
                            {{ form.post_office.label(class="form_label") }}

                            {% if form.post_office.errors %}
                                {{ form.post_office( class="form_textbox is-invalid" ) }}
                                <div class="invalid-feedback">
                                    {% for error in form.post_office.errors %}
                                        <span>  {{ error }}   </span>
                                    {% endfor %}
                                </div>

                            {% else %}
                                {{ form.post_office( class="form_textbox" ) }}
                            {% endif %}
                        </div>

                        <div class="form_input">
                            {{ form.upozilla.label(class="form_label") }}

                            {% if form.upozilla.errors %}
                                {{ form.upozilla( class="form_textbox is-invalid" ) }}
                                <div class="invalid-feedback">
                                    {% for error in form.upozilla.errors %}
                                        <span>  {{ error }}   </span>
                                    {% endfor %}
                                </div>

                            {% else %}
                                {{ form.upozilla( class="form_textbox" ) }}
                            {% endif %}
                        </div>

                        <div class="form_input">
                            {{ form.zilla.label(class="form_label") }}

                            {% if form.zilla.errors %}
                                {{ form.zilla( class="form_textbox is-invalid" ) }}
                                <div class="invalid-feedback">
                                    {% for error in form.zilla.errors %}
                                        <span>  {{ error }}   </span>
                                    {% endfor %}
                                </div>

                            {% else %}
                                {{ form.zilla( class="form_textbox" ) }}
                            {% endif %}
                        </div>

                    </div>
...