• Home
  • About
    • 朱智博在Github上的Blog photo

      朱智博在Github上的Blog

      朱智博,朱智博的博客,zhuio,zhuio.github.io,

    • Learn More
    • Email
    • Github
    • Weibo
  • Posts
    • All Posts
    • All Tags
  • Projects

HASH2

12 Feb 2017

Reading time ~1 minute

Flask Registration Code Tutorial

在本教程中,我们将在__init__.py中对我们的注册代码进行更多工作。

在我们再进一步之前,让我们安装passlib: pip install passlib 然后,向我们的__init__.py文件中添加一些导入:

from flask import Flask, render_template, flash, request, url_for, redirect, session
from wtforms import Form, BooleanField, TextField, PasswordField, validators
from passlib.hash import sha256_crypt
from MySQLdb import escape_string as thwart
import gc

Passlib将用于密码加密,而escape_string用于防止SQL注入尝试(黑客)。gc模块用于垃圾回收(内存问题)。我们还将会话添加到flask导入,用于访问用户特定的会话/ cookie信息。我们还从wtforms导入一堆字段的东西。

现在我们有一些新的register_page函数代码:

@app.route('/register/', methods=["GET","POST"])
def register_page():
    try:
        form = RegistrationForm(request.form)

        if request.method == "POST" and form.validate():
            username  = form.username.data
            email = form.email.data
            password = sha256_crypt.encrypt((str(form.password.data)))
            c, conn = connection()

            x = c.execute("SELECT * FROM users WHERE username = (%s)",
                          (thwart(username)))

            if int(x) > 0:
                flash("That username is already taken, please choose another")
                return render_template('register.html', form=form)

            else:
                c.execute("INSERT INTO users (username, password, email, tracking) VALUES (%s, %s, %s, %s)",
                          (thwart(username), thwart(password), thwart(email), thwart("/introduction-to-python-programming/")))

                conn.commit()
                flash("Thanks for registering!")
                c.close()
                conn.close()
                gc.collect()

                session['logged_in'] = True
                session['username'] = username

                return redirect(url_for('dashboard'))

        return render_template("register.html", form=form)

    except Exception as e:
        return(str(e))

简单的,代码首先会检查方法是否是POST。请记住,用户可能只是简单地加载注册页面。如果有一个POST请求,那么我们要收集表单中的信息。

一旦我们获得表单中的信息,接下来我们要做的就是连接到数据库。现在我们不希望有两个用户使用相同的用户名,因此我们首先要查看该用户名是否已经存在。如果是,我们想告诉他们用户名已经存在,让他们再试一次。

如果用户名不存在,我们已经做到了这一点,这意味着我们有一个唯一的用户名,匹配的密码和一封电子邮件,可以插入我们的数据库。

所以我们插入数据库,向用户发送一条消息,感谢他们注册,你就完成了。

当所有设置插入,你需要确保你总是运行conn.commit(),这是“保存”您的更改到数据库。如果您忘记这样做,那么您的更改将不会保存。

最后,我们使用gc.collect()来帮助减少内存浪费。

注意,我们恰好在注册后登录我们的用户,使用烧录器会话功能。



HASHflask Share Tweet +1