pythonflask留言板_python入门篇1:基于flask的留言板网站实现

声明:以下内容是本人大二在某公司实习时学习python做的一个小练习!代码风格比较差,不怎么优美!还请大家指教!

一.题目与背景知识说明

(1)题目描述

学习flask,并编写一个基于flask技术的留言板程序。留言板需求较为简单,用户可以在页面输入昵称和邮箱,输入留言内容(至少50字,上限500字),提交后则在页面下方显示最新的十条留言信息

(2)flask简介

flask是一个轻量级的Web应用框架,使用Python编写。基于WerkzeugWSGI工具箱和Jinja2模板引擎。Flask使用BSD授权。Flask也被称为 “microframework” ,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

二.需求分析

1.网络留言板,又称为留言簿或留言本,是目前网站中使用较广泛的一种与用户沟通、交流的方式。通过留言板,可收集来自用户的意见或需求信息,并可作出相应的回复,从而实现网站与客户之间及不同客户之间的交流与沟通。通过留言板用户和访问者在Internet上实现信息的快速传递,提高办事效率。因此留言板已成为现代人沟通和获取消息的重要组成部分。开发一个留言系统,首先需要确定留言的功能是什么,也就是用户想要留言版所拥有的作用。用户使用留言是按照一定的流程来进行的:用户输入姓名进入留言,可以就某个话题展开讨论,通过留言功能给个人或者网站提出自己的意见。

三.程序设计思路

本程序基于flask的web框架,用python实现了留言板功能,留言数据存储在sqlite数据库上。并且用bootstrap制作了较为简洁美观的界面。下面简要说明下具体实现:

(1)具体函数方法:

def connect_db():快速连接到指定数据库的方法

def init_db():初始化数据库

def show_entries():输出函数,会将条目作为字典传递给 show_entries.html 模板,并返回之后的渲染结果

def add_entry():用户添加新的留言信息函数,并只响应 POST 请求,表单显示在 show_entries.而且对输入的字数做了限制在50字到500字范围,不在这个范围就不提交到数据库.

def login():登录函数

def logout():退出登录函数

(2)数据库

本次实验采用的是sqlite数据库,下面是数据库中建立的存储留言信息的table ,如图所示:

id是自增的,用来做主键,比如显示最新的十条留言信息就是用id值实现.

四.程序运行说明

首先,打开浏览器输入程序的地址,显示界面如下图:

点击输入留言信息,运行图片如下:

显示最新的留言信息如下:(最新留言名字加大显示)

五.程序清单(附有注释)

# -*- coding: utf-8 -*-

from __future__ import with_statement

import sqlite3

from flask import Flask,request,session,g,redirect,url_for,\

abort,render_template,flash

from contextlib import closing

# configuration

DATABASE = '/home/feng/project/flaskr/flaskr.db'#数据库存储路径

DEBUG = True

SECRET_KEY = 'development key'

USERNAME = 'admin'

PASSWORD = 'default'

#create our little application :)

app = Flask(__name__)

app.config.from_object(__name__)

app.config.from_envvar('FLASKR_SETTINGS', silent=True)

def connect_db():#快速连接到指定数据库的方法

return sqlite3.connect(app.config['DATABASE'])

def init_db():#初始化数据库

with closing(connect_db()) as db:

with app.open_resource('schema.sql') as f:

db.cursor().executescript(f.read())

db.commit()

@app.before_request

def before_request():

g.db = connect_db()

@app.teardown_request

def teardown_request(exception):

g.db.close()

@app.route('/')

def show_entries():#输出函数,会将条目作为字典传递给 show_entries.html 模板,并返回之后的渲染结果

cur = g.db.execute('select name,email,text from entries order by id desc limit 10')

entries = [dict(name=row[0], email=row[1], text=row[2]) for row in cur.fetchall()]

return render_template('show_entries.html', entries=entries)

@app.route('/add', methods=['POST'])

def add_entry():#用户添加新的留言信息函数,并只响应 POST 请求,表单显示在 show_entries

if not session.get('logged_in'):

abort(401)

if len(request.form['text']) >50 and len(request.form['text'])<500:#实现控制字数在50到500范围内

g.db.execute('insert into entries (name,email,text) values (?,?,?)',

[request.form['name'],request.form['email'], request.form['text']])

g.db.commit()

flash('New entry was successfully posted')

else:

flash('The input range must be between 50 and 500 characters ')#如果留言信息不在范围内作出提示

return redirect(url_for('show_entries'))

@app.route('/login', methods=['GET', 'POST'])

def login():#登入函数

error = None

if request.method == 'POST':

if request.form['username'] != app.config['USERNAME']:

error = 'name error'

elif request.form['password'] != app.config['PASSWORD']:

error = 'password error'

else:

session['logged_in'] = True

flash('log in')

return redirect(url_for('show_entries'))

return render_template('login.html', error=error)

@app.route('/logout')

def logout():#退出登录函数

session.pop('logged_in', None)

flash('log out')

return redirect(url_for('show_entries'))

if __name__ == '__main__':

init_db()

app.run(debug=True)

六、小结(收获和体会)

由于出学python,所以几天时间搞这个还是比较大压力的!还有就是之前看flask觉得很吃力,现在虽然做出东西来,但是心里还是没有底子的感觉!不过就是觉得bootstrap很方便,很好用!但是时间关系,就做的很一般。只能说希望在以后的实践中逐渐提高自己的水平吧,尽快摆脱菜鸟身份!

你可能感兴趣的:(pythonflask留言板)