“Python Flask: 实现用户注册功能”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
创建模板文件
创建模板文件
第29行: 第29行:
  
 
==创建模板文件==
 
==创建模板文件==
 +
 +
===创建模板文件===
 
render_template()函数默认查找的模板文件路径"/templates",
 
render_template()函数默认查找的模板文件路径"/templates",
  
第58行: 第60行:
 
{% endblock %}</nowiki>
 
{% endblock %}</nowiki>
  
 +
===创建公共文件===
 +
====layout.html====
 
*extends 'layout.html':引入公共文件layout.html
 
*extends 'layout.html':引入公共文件layout.html
  
第81行: 第85行:
 
</html></nowiki>
 
</html></nowiki>
  
includes/_navbar.html:
+
====includes/_navbar.html====
  
 
  <nowiki>
 
  <nowiki>

2022年1月16日 (日) 02:15的版本

创建注册路由

在manage.py入口文件中,创建一个名为app的Flask实例,

然后用app.route()函数创建路由。

app = Flask(__name__) # 创建应用

# 用户注册
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form) # 实例化表单类
    if request.method == 'POST' and form.validate(): # 如果提交表单,并字段验证通过
        # 获取字段内容
        email = form.email.data
        username = form.username.data
        password = sha256_crypt.encrypt(str(form.password.data)) # 对密码进行加密

        db = MysqlUtil() # 实例化数据库操作类
        sql = "INSERT INTO users(email,username,password) \
               VALUES ('%s', '%s', '%s')" % (email,username,password) # user表中插入记录
        db.insert(sql)

        flash('您已注册成功,请先登录', 'success') # 闪存信息
        return redirect(url_for('login')) # 跳转到登录页面

    return render_template('register.html', form=form) # 渲染模板板

创建模板文件

创建模板文件

render_template()函数默认查找的模板文件路径"/templates",

在该路径下创建register.html

{% extends 'layout.html' %}

{% block body %}
<div class="content">
  <h1 class="title-center">用户注册</h1>
  {% from "includes/_formhelpers.html" import render_field %}
  <form method="POST" action="">
    <div class="form-group">
      {{render_field(form.email, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.username, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.password, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.confirm, class_="form-control")}}
    </div>
    <p><input type="submit" class="btn btn-primary" value="注册"></p>
  </form>
</div>
{% endblock %}

创建公共文件

layout.html

  • extends 'layout.html':引入公共文件layout.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>读书笔记</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/css/style.css">
    <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </head>
  <body>
    {% include 'includes/_navbar.html' %}
    <div class="container">
      {% include 'includes/_messages.html' %}
      {% block body %}{% endblock %}
    </div>
    {% include 'includes/_footer.html' %}
  </body>
</html>

includes/_navbar.html

<nav class="navbar navbar-default">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="/">学习笔记</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li><a href="/">主页</a></li>
            <li><a href="/articles">笔记</a></li>
            <li><a href="/about">关于</a></li>
          </ul>
          <ul class="nav navbar-nav navbar-right">
            {% if session.logged_in %}
              <li><a href="/dashboard">控制台</a></li>
              <li><a href="/logout">退出</a></li>
            {% else %}
              <li><a href="/register">注册</a></li>
              <li><a href="/login">登录</a></li>
            {% endif %}
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>