Я пытался сохранить входные данные пользователя в базе данных. Но каждый раз я терпел неудачу. Я использую 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>