AttributeError: ‘NoneType’ object has no attribute ‘cursor’

  Kiến thức lập trình

code:

from flask import Flask,render_template,request,redirect,url_for,session
from flask_mysqldb import MySQL
from flask_bcrypt import Bcrypt
import os
import MySQLdb.cursors
import re

app=Flask(__name__)
app.secret_key='OP1697'
app.config['MYSQL_HOST']='localhost'
app.config['MYSQL_USER']='root'
app.config['MYSQL_PASSWORD']='HarenOP1697#'
app.config['MYSQL_DB']='pythonlogin'

mysql=MySQL(app)

@app.route('/pythonlogin/',methods=['GET','POST'])
def login():
    msg=''
    if request.method=='POST' and 'username' in request.form and 'password' in request.form:
        username=request.form['username']
        password=request.form['password']
        cursor=mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        cursor.execute('SELECT * FROM accounts WHERE username=%s AND password=%s', (username,password,))
        account=cursor.fetchone()


        if account:
            session['loggedin']=True
            session['id']=account['id']
            session['username']=account['username']

            return redirect(url_for('home'))
        else:
             msg='Incorrect username/password!'
    return render_template('index.html', msg=msg)

@app.route('/pythonlogin/logout')
def logout():
    session.pop('loggedin',None)
    session.pop('id',None)
    session.pop('username',None)
    return redirect(url_for('login'))

@app.route('/pythonlogin/register',methods=['GET','POST'])
def register():
    msg=''
    if request.method=='POST' and 'username' in request.form and 'password' in request.form and 'email' in request.form:
        username=request.form['username']
        password=request.form['password']
        email=request.form['email']
        cursor=mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        cursor.execute('SELECT * FROM accounts WHERE username=%s',(username,))
        account=cursor.fetchone()
        if account:
            msg='Account already exists!'
        elif not re.match(r'[^@]+@[^@]+.[^@]+',email):
            msg='Invalid email address!'
        elif not re.match(r'[A-Za-z0-9]+',username):
            msg='Username must contain only characters and numbers!'
        elif not username or not password or not email:
            msg='Please fill out the form!'
        else:
            cursor.execute('INSERT INTO accounts VALUES(NULL,%s,%s,%s)',(username,password,email,))
            mysql.connection.commit()
            msg='You have successfully registered'
    elif request.method=='POST':
        msg='Please fill out the form!'
    return render_template('register.html',msg=msg)

@app.route('/pythonlogin/home')
def home():
    if 'loggedin' in session:
        return render_template('home.html',username=session['username'])
    return redirect(url_for('login'))

@app.route('/pyhtonlogin/profile')
def profile():
    if 'loggedin' in session:
        cursor=mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        cursor.execute('SELECT * FROM accounts WHERE id=%s',(session['id'],))
        account=cursor.fetchone()
        return render_template('profile.html',account=account)
    return redirect(url_for('login'))

if __name__ == '__main__':
    app.run(debug=True)

I get error: AttributeError: ‘NoneType’ object has no attribute ‘cursor’` when i click “register” or “login” button.

If possible, please send the modified code.

I tried to look for something, but I still didn’t understand what I needed to do.

There should have been an authorization system

Sorry for my bad english

New contributor

Ярослав Чупахин is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

LEAVE A COMMENT