Cómo utilizar flask mysql para implementar páginas simples de registro de usuario y efectos de inicio de sesión
Utilice flask mysql para implementar el registro y el inicio de sesión de usuario:
Una página simple de registro e inicio de sesión de usuario con solo dos partes.
Implica una base de datos para almacenar datos del usuario (registro) y leer datos del usuario (verificación de inicio de sesión). Simplemente comprenda cómo usar Python para conectarse y operar la base de datos, y comprenda que las declaraciones de la base de datos SQL son similares a mysql. Lo comprenderá después de algunas miradas e intentos más.
En el programa del sitio web, cómo el front-end envía el formulario, cómo el back-end obtiene la solicitud enviada por el usuario, verifica los datos en la base de datos para iniciar sesión y luego cómo guardar. La información de inicio de sesión del usuario después de iniciar sesión, todas usan cookies, es solo la sesión en flask (de hecho, la sesión también es una cookie, flask la encapsula y la convierte en cifrada).
Por ejemplo: from?functools?import?wrapsdef?authorize(fn):
@wraps(fn)
def?wrapper(*args, ? * *kwds):
usuario?=?session.get('logged_in',?None)
if?usuario:
return?fn(usuario = usuario)
else:
return?redirect( url_for('signin', next=request.path))
return?wrapper@app.route ( '/home')@authorizedef?home(**kwds):
nombre de usuario?=?kwds[' usuario']
return?render_template('index.html'? , nombre de usuario=nombre de usuario)#Contraseña de almacenamiento cifrado import?osimport?hashlibdef?encrypt_password(contraseña,?salt=None):
if?not?salt:
salt?=?os urandom(16).encode('hex')?#length?32
resultado?=?contraseña
para?i?in?range(3):
resultado?=?hashlib.sha256(contraseña? ?salt).hexdigest()[::2]?
return?result,?salt#Clase de manejo de errores simple?loginError(Excepción) :
def?__init__(self,?value):
self.value?=?value
def?__str__(self):
return?repr(self.value)#?Regístrese e inicie sesión (el siguiente código aún no se ha ejecutado) #?Conéctese a la base de datos, uso mysql.connector #?/downloads/connector/python/# ?El estilo de escritura es el mismo que el MySQL-python habitual#?No hay ningún código para conectarse a la base de datos a continuación@app.route('/register/',?methods=['GET','POST'])def ?request():
si? request.method?==?GET':
return?render_template("register.html")
si? solicitud.método?==? POST':
#?Es mejor verificar la entrada del usuario aquí, no lo escribiré
u?=?request.form['username']
p, s?=?encrypt_password(request.form['contraseña'])
g.db.cursor.execute('INSERT?INTO?users?(nombre, contraseña, salt)?VALUES ? (s, s, s)', (u, p, s,)
g.db.commit()
return?redi
rect(url_for(' signin'))@app.route('/signin/',?methods=['GET','POST']) def?signin():
if?request. método?==?GET':
referrer?=?request.args.get('next','/')
return?render_template("login.html", next=referrer)
if?request.POST':
u?=?request.form['nombre de usuario']
p?=?request. formulario['contraseña']
n?=?request.form['siguiente']
pruebe:
g.db cursor.execute(' ¿SELECCIONAR?`nombre`?DE?usuarios?DONDE?nombre?=?s',(u,))
if?not?g.db.cursor.fetchone():
raise?loginError(u'¡Nombre de usuario o contraseña incorrectos!')
g.db.cursor.execute('SELECT?`salt`,`contraseña`?FROM?users?WHERE?name?= ?s', (u,))
salt, contraseña?=?g.db.cursor.fetchone()
if?encrypt_password(p, salt)[0]? ==?contraseña:
sesión['logged_in']?=?u
return?redirect(siguiente)
otro:
levantar?)
excepto?loginError?as?e:
return?render_template('login.html',?next=next, error=e.value)@app. route('/signout/',?method= ['POST'])def?signout():
session.pop('logged_in',?None)
return? redirigir(url_for('casa'))