Home > Software design >  python flask session , login and index not working
python flask session , login and index not working

Time:09-10

I have a python flask app with login module implemented using extension python flask. In my login method.

The Error Message

enter image description here

app.py

# import the Flask class from the flask module
from flask import Flask, render_template, redirect, url_for, request, session

# create the application object
app = Flask(__name__)
app.secret_key = "hello"

# use decorators to link the function to a url
#@app.route('/')
#def home():
 #   return "Hello, World!"  # return a string

@app.route('/index', methods=['GET'])
def index():
    if session.get ('username'):
        return render_template('index.html')
    else:    
        return render_template('login.html')  # render a template

# route for handling the login page logic
@app.route('/', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'admin':
            error = 'Invalid Credentials. Please try again.'  
        else:    
         session['username'] = True
         return redirect(url_for('index'))
    return render_template('login.html', error=error)


# start the server with the 'run()' method
if __name__ == '__main__':
    app.run(debug=True)

login page login.html

<html>
  <head>
    <title>Flask Intro - login page</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <div >
      <h1>Please login</h1>
      <br>
      <form action="" method="post">
        <input type="text" placeholder="Username" name="username" value="{{
          request.form.username }}">
         <input type="password" placeholder="Password" name="password" value="{{
          request.form.password }}">
        <input  type="submit" value="Login">
      </form>
      {% if error %}
        <p ><strong>Error:</strong> {{ error }}</p>
      {% endif %}
    </div>
  </body>
</html>

index.html

<DOCTYPE Html>
    <html>
    <head>
    <tile>Addressing a Site</tile>
    </head>
    <body>
    <address>welcome.</address>
    </body>
    </html>

i am trying to create a session between login and index page,just getting started with python flask framework, login session not working well.

CodePudding user response:

It seems like you are actually having an issue with the methods rather than the session not working.

The Method Not Allowed error means that you are sending a GET/POST request to a page that does not accept that type of request.

Try changing the start of your login form to this

<form action="{{ url_for('login') }}" method="POST">

I just got it running on my computer and this works, the reason it did not work before was because the form was sending the post request to the /index route, which only accepts GET request.

Also, I noticed something else you may want to change.

You currently have this on your index route

if session.get ('username'):
        return render_template('index.html')
    else:    
        return render_template('login.html') 

But it would be better to change that to this

if session.get ('username'):
        return render_template('index.html')
    else:    
        return redirect(url_for('login'))

That way the user is sent back to the login page rather than just being shown the login template from the index page.

I hope all of that helps.

  • Related