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 %}