NameError: Name ‘Request’ Is Not Defined In Python

NameError: name 'request' is not defined in Python

If you are getting trouble with the “NameError: name ‘request’ is not defined” in Python, keep reading our article. We will give you some methods to handle this problem.

Reason of the “NameError: name ‘request’ is not defined” in Python

The request is a protocol known as the interaction between the client and server. When talking about the request, we are talking about the HTML request.

In the Python programming language, NameError: name ‘request’ is not defined occurs when working with Flask or Django framework. Take a look at our following examples to see how the error occurs.

Errors by not importing request in Flask:

from flask import Flask, render_template
import model
 
# Create flask app
flask_app = Flask(__name__)
 
@flask_app.route("/")
def Home():
    return render_template("index.html")
 
@flask_app.route("/solution", methods = ["POST"])
def solution():
    parameter = [float(x) for x in request.form.values()] # <-- Error
    a = parameter[0]
    b = parameter[1]
    c = parameter[2]
    solution = model.quadratic(a,b,c)
    if solution == None:
        return render_template("index.html", text = "No solution")
    return render_template("index.html", text = "Solution of the equation is {}".format(solution))
  
if __name__ == "__main__":
    flask_app.run(debug=True)

Result:

line 13, in solution
    parameter = [float(x) for x in request.form.values()]
NameError: name 'request' is not defined

Error when using request out of views module in Django:

from django import forms
 
class UserForm(forms.Form):
    full_name = forms.CharField(label='Full Name')
    email = forms.CharField(label='Email', intital = request.user.email)

Result:

line 5, in UserForm
    email = forms.CharField(label='Email', intital = request.user.email)
NameError: name 'request' is not defined

Let’s move on to how to solve the problem.

Solution to this problems

Import request in Flask

To access users’ input, you must import the available request module in Flask. Then the server can receive requests from clients. Visit our GitHub to see the whole project.

Code:

# Import request here
from flask import Flask, render_template, request
import model
 
# Create flask app
flask_app = Flask(__name__)

After importing the request, run the file and input values for a, b, and c, which are parameters of the Quadratic Equation and the result.

Remove all requests outer views.py module

When working with Django Framework, remember that request only exists in the views function that interacts with the client. All the rest modules are just classes to define the project’s architecture. To fix this error, remove the request in the forms module and create all requests in the views module. Full code here.

Remove request in forms.py module:

from django import forms
 
class UserForm(forms.Form):
    full_name = forms.CharField(label='Full Name')
    email = forms.CharField(label='Email') # <-- Remove request here

Update request in the views.py module:

from django.shortcuts import render
from .forms import UserForm
from django.http import HttpResponse
 
def contact(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        
        if form.is_valid():
            name = form.cleaned_data['full_name']
            email = form.cleaned_data['email']
            print(name, email )
            return HttpResponse(f"Hello {name}. Welcome to Learn Share IT")
          
    form = UserForm()
    return render(request, 'form.html', {'form':form})

Now, run the command Python manage.py runserver and go to the local address http://127.0.0.1:8000/ to see the result.

Summary

Our article has explained the “NameError: name ‘request’ is not defined” in Python. We also give full projects to work with Flask and Django Frameworks. If you have any questions, please give your comments. Thanks for reading!

Maybe you are interested:

Leave a Reply

Your email address will not be published. Required fields are marked *