Reputation: 1
I have given a snippet of my forms.py
, routes.py
and createPatient.html
(relevant screenshot). I had a previous form for login of the same application where I faced the same error for which I deleted the old project and started this new one.
route.py
@app.route("/createPatient",methods=['GET','POST'])
def create():
form1 = createPatient(request.form)
if form1.validate_on_submit():
print("Sucess")
return redirect('/index')
else:
print("Unsuccessful")
return render_template("createPatient.html", form = form1)
the output of this when I entered form1.validate()
is false
and form1.errors
is {}
and prints unsuccessful
forms.py
class createPatient(FlaskForm):
ssn_id = IntegerField("SSN ID", validators = [DataRequired()])
name = StringField("Patient Name",validators=[DataRequired()])
age = IntegerField("Patient Age",validators=[DataRequired()])
doa = DateField("Date of Admission",validators=[DataRequired()])
tob = SelectField("Type of Bed", choices = [('General Ward'),('Semi Sharing'),('Single Room')],validators =[DataRequired()])
address = StringField("Address", validators=[DataRequired()])
city = StringField("City", validators=[DataRequired(), Length(min = 6 ,max = 20)])
state = StringField("State", validators=[DataRequired(), Length(max = 30)])
create = SubmitField("Create Patient")
no syntatical error in the above file
createPatient.html
<form name = "createPatient" action= "/createPatient" method="POST" >
{{ form.hidden_tag() }}
<p>
{{ form.ssn_id.label }}
{{ form.ssn_id(size = 9 ) }}
{% for error in form.ssn_id.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.name.label }}
{{ form.name(size = 35 ) }}
{% for error in form.name.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.age.label }}
{{ form.age(size = 35 ) }}
{% for error in form.age.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.doa.label }}
{{ form.doa(size = 35 ) }}
{% for error in form.doa.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
{{ form.tob.label }}
{{ form.tob() }}
{% for error in form.tob.errors %}
<span class="error-message">*{{ error }}</span>
{% endfor %}<br>
<p>
{{ form.address.label }}
{{ form.address(size = 35 ) }}
{% for error in form.address.errors %}
<span clas="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.city.label }}
{{ form.city(size = 35 ) }}
{% for error in form.city.errors %}
<span clas="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p>
{{ form.state.label }}
{{ form.state(size = 35 ) }}
{% for error in form.state.errors %}
<span clas="error-message">*{{ error }}</span>
{% endfor %}<br>
</p>
<p> {{ form.create ()}} </p>
</form>
config.py
import os
class Config(object):
SECRET_KEY = os.urandom(32)
init.py
from flask import Flask
from config import Config
from flask_mongoengine import MongoEngine
app =Flask(__name__)
app['SECRET_KEY']= Config.SECRET_KEY
Upvotes: 0
Views: 2478
Reputation: 171
As far as I know, CSRF tokens are generated using SECRET_KEY
. In your config.py file, I see SECRET_KEY = os.urandom(32)
. Each time you reload your app, your key will be replaced with new one. This can cause CSRF errors.
Instead try to generate your key externally and place it inside .env or config.py:
SECRET_KEY = 'super-secret-random-key'
or
import os
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY')
Upvotes: 1