from flask import request is not working in my python Flask app I have compared the code multiple times to another Flask App that I have made that functions, yet I cannot find the problem.
This is the error that I get when I try to use the request.form function. enter image description here.
I am trying to use the request function of flask to submit a form and create a "request" in my database.
Here is my controller:
from flask_app import app
from flask import render_template, Flask, request
from flask_app.models.request_model import Request
# Create Request
@app.route('/request')
def request():
page = 'request'
print(request)
return render_template('request.html', page = page)
@app.route('/request/create', methods = ['POST'])
def new_request():
if not Request.validate(request.form):
return redirect('/request')
Request.create(request.form)
return render_template('submission.html')
Here is my model:
from flask_app.config.mysqlconnection import connectToMySQL
from flask_app import DATABASE
from flask import flash #part of data validation
import re #regex access
EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$')
class Request:
def __init__(self, data):
self.id = data['id']
self.first_name = data['first_name']
self.last_name = data['last_name']
self.email = data['email']
self.phone = data['phone']
self.message = data['message']
self.created_at = data['created_at']
self.updated_at = data['updated_at']
# create
@classmethod
def create(cls, data):
query = "INSERT INTO requests (first_name, last_name, email, phone, message) VALUES (%(first_name)s, %(last_name)s, %(email)s, %(phone)s, %(message)s);"
return connectToMySQL(DATABASE).query_db(query, data)
# get all requests
@classmethod
def get_requests(cls):
query = "SELECT * FROM requests;"
return connectToMySQL(DATABASE).query_db(query)
# validations
@staticmethod
def validate(request_data):
is_valid = True
if len(request_data['first_name']) < 2:
flash("First name is required", "first_name")
is_valid = False
if len(request_data['last_name']) < 2:
flash("Last name is required", "last_name")
is_valid = False
if len(request_data['email']) < 1:
flash("Please provide email", "email")
is_valid = False
if len(request_data['message']) < 5:
flash("Please tell us what you're interested in", "message")
elif not EMAIL_REGEX.match(request_data['email']):
flash("Invalid email", "reg")
is_valid = False
return is_valid
and here is the html:
<!-- request form -->
<form id="form" class="p-3 col-4 form" action="/request/create" method="POST">
<label class="pt-2 text-dark form-label" for="first_name">First Name:*</label>
{% for message in get_flashed_messages(category_filter = ['first_name']) %}
<p class="text-danger">*{{message}}</p>
{% endfor %}
<input class="form-control" type="text" name="first_name" id="first_name">
<label class="pt-2 text-dark form-label" for="last_name">Last Name:*</label>
{% for message in get_flashed_messages(category_filter = ['last_name']) %}
<p class="text-danger">*{{message}}</p>
{% endfor %}
<input class="form-control" type="text" name="last_name" id="last_name">
<label class="pt-2 text-dark form-label" for="email">Email:*</label>
{% for message in get_flashed_messages(category_filter = ['email']) %}
<p class="text-danger">*{{message}}</p>
{% endfor %}
<input class="form-control" type="text" name="email" id="email">
<label class="pt-2 text-dark form-label" for="phone">Phone:</label>
<input class="form-control" type="text" name="phone" id="phone">
<label class="pt-2 text-dark form-label" for="message">Message:*</label>
{% for message in get_flashed_messages(category_filter = ['message']) %}
<p class="text-danger">*{{message}}</p>
{% endfor %}
<textarea class="form-control" name="message" id="message" cols="30" rows="5"></textarea>
<a href="/request">Clear</a>
<button type="submit">Submit</button>
</form>
You have defined a function
requestand thus overlaid the import with the same identifier. Your request function does not have aformattribute, as the error message says.Change the name of your first endpoint or import with an alias.