您的位置:首页 > 编程语言 > Python开发

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

2014-06-11 23:26 1261 查看
声明:以下内容是本人大二在某公司实习时学习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很方便,很好用!但是时间关系,就做的很一般。只能说希望在以后的实践中逐渐提高自己的水平吧,尽快摆脱菜鸟身份!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐