Python Flask: 实现添加笔记功能

来自CloudWiki
跳转至: 导航搜索

代码

from flask import Flask, render_template, flash, redirect, url_for, session, request, logging
from mysql_util import MysqlUtil
 
from passlib.hash import sha256_crypt
from forms import RegisterForm,ArticleForm
from functools import wraps

import time
from forms import RegisterForm,ArticleForm



# 添加笔记
@app.route('/add_article', methods=['GET', 'POST'])
@is_logged_in
def add_article():
    form = ArticleForm(request.form) # 实例化ArticleForm表单类
    if request.method == 'POST' and form.validate(): # 如果用户提交表单,并且表单验证通过
        # 获取表单字段内容
        title = form.title.data
        content = form.content.data
        author = session['username']
        create_date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        db = MysqlUtil() # 实例化数据库操作类
        sql = "INSERT INTO articles(title,content,author,create_date) \
               VALUES ('%s', '%s', '%s','%s')" % (title,content,author,create_date) # 插入数据的SQL语句
        db.insert(sql)
        flash('创建成功', 'success') # 闪存信息
        return redirect(url_for('dashboard'))               # 跳转到控制台
    return render_template('add_article.html', form=form)   # 渲染模板

定义的类

from wtforms import Form, StringField, TextAreaField, PasswordField
from wtforms.validators import DataRequired,Length,Email,EqualTo

# Article Form Class
class ArticleForm(Form):
    title = StringField(
        '标题',
        validators=[
            # DataRequired(message= '标题长度应该在2-30字符之间'),
            DataRequired(message='长度不少于5个字符'),
            Length(min=2,max=30)
        ]
    )
    content = TextAreaField(
        '内容',
        validators=[
            DataRequired(message='长度不少于5个字符'),
            Length(min=5)
        ]
    )

模板

{% extends 'layout.html' %}

{% block body %}
  <h1>添加笔记</h1>
  {% from "includes/_formhelpers.html" import render_field %}
  <form method="POST" action="">
    <div class="form-group">
      {{ render_field(form.title, class_="form-control") }}
    </div>
    <div class="form-group">
      {{ render_field(form.content, class_="form-control content-text", id="editor") }}
    </div>
    <p><input class="btn btn-primary" type="submit" value="提交">
  </form>

    <script src="//cdn.ckeditor.com/4.11.2/standard/ckeditor.js"></script>
    <script type="text/javascript">
      CKEDITOR.replace( 'editor')
    </script>
{% endblock %}


宏函数

includes/_formhelpers.html:

{% macro render_field(field) %}
  {{ field.label }}
  {{ field(**kwargs)|safe }}
  {% if field.errors %}
    {% for error in field.errors %}
      <span class="help-inline text-danger">{{ error }}</span>
    {% endfor %}
  {% endif %}
{% endmacro %}

效果图

Python22011702.png