Python 每日一练 | Flask 实现半成品留言板
留言板Flask实现
引言
- 看了几天网上的代码,终于写出来一个半成品的
Flask
的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题
或者渲染写的存在问题吧\(|(*′口`)\) - 最近找到了一本能系统学习
Flask
的书,看在后续学习的过程中能不能解决这个问题吧,哎,好菜啊\(_〆(´Д` )\) - 不过这次练习还是学习到了不少新知识,对
Flask
有了新的认识,所以还是在这里继续记录一下
Flask连接Mysql
- 我最早看到的实验楼做的
Flask
的一个示例还是比较简单的那种,因为它是只用到了一个表,所以直接使用的自带的sqlite3
的库实现的数据库连接,他这种连接方式我个人感觉就是利用了一个文件存储数据的那种方式实现的,实际并不能说是使用了数据库的方式 - 首先来大致说一下它的思路,就是先预写好创建数据表的
sql
脚本,然后使用\tmp
目录(类似一个回收站一样的,由于存储临时数据的目录)下自己设置的flaskr.db
文件存储数据,这个文件一开始是不存在的,所以所以就要涉及到我们要先去初始化一下数据库,当这一切都操作完成后,就完成了一个数据库的处理,详细的代码及流程大家可以自己去看一下,我这里就不多说了 - 到了我这次实现连接的方式了,我是使用的
Flask_SQLALchemy
库实现的和mysql
的数据库连接,这个Flask-SQLAlchemy
数据库实例提供了一个基类以及一组辅助类和函数用于定义它的结构。 - 大致的流程,首先还是数据库的连接,示例代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SECRET_KEY'] = "Konmu" #就是一个密钥,对于flask以及相关的扩展的加密,为了安全所设置
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:123456@127.0.0.1:3306/web_talk" # 数据库链接格式用户:密码@主机名/数据库名
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #设置请求结束后自动提交数据库中的变动
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app) #实例化数据库对象
- 应用程序数据库
URL
必须在Flask
配置对象中的SQLALCHEMY_DATABASE_URI
键中进行配置。另一个有用的选项是SQLALCHEMY_COMMIT_ON_TEARDOWN
,可以设置为True
来启用自动提交数据库更改在每个请求中。 - 定义数据库模型
'''定义数据库结构'''
class User(db.Model):
#定义表名,存储用户信息
__tablename__ = 'user'
#定义各字段
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64),unique=True)# 用户名
password = db.Column(db.String(64),unique=True)# 密码
email = db.Column(db.String(64),unique=True)# 邮箱
def __repr__(self):
return '<User {}>'.format(self.name) # repr()方法显示一个可读字符串,用于测试使用
# 留言
class MessageText(db.Model):
#定义存储留言的表
__tablename__ = 'messagetext'
#定义各字段
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(64))#用户名
content = db.Column(db.String(100))# 留言内容
def __repr__(self):
return('<MessageText %r Title %r>'%(self.id,self.title))
__tablename__
类变量定义数据库中表的名称。如果tablename
缺省Flask-SQLAlchemy
会指定默认的表名,但是这些缺省名称不遵守使用复数命名的约定,所以最好是显式命名表名。其余的变量是模型的属性,被定义为db.Column
类的实例。- 对于这个数据库的实例化和数据写入,使用了这个库之后我感觉就像是直接操作一个类的对象一样方便了,从而不需要再去使用
sql
语句了 - 初始化数据库,是使用的
create_all()
方法 - 下面是我留言板(姑且这么叫吧)完成后数据库存储的数据截图
后端编写
- 对于我们存储的问题解决后,剩下就是编写我们的留言板的代码了,由于前端的三剑客我已经忘得差不多了,所以就只写了一个非常简易的表单
- 针对留言信息,我们肯定就要使用
POST
方法来传递了,所以method
要有POST
,其余就是对于数据库的数据的操作,即要把留言数据写入 - 我的示例代码如下
@app.route('/index')
def index():
return('hello,welcome!')
@app.route('/message', methods=['GET', 'POST'])
def message():
if request.method == 'GET':
result = MessageText.query.all()
return(render_template('message.html',messagetext=result))
else:
try:
result = MessageText.query.all()
msg = MessageText()
msg.id = MessageText.query.count() + 1
msg.title = request.form["title"]
msg.content = request.form["content"]
now = datetime.datetime.now()
msg.date = now.date()
msg.time = datetime.time(now.hour,now.minute,now.second)
db.session.add(msg)
db.session.commit()
flash('New entry was successfully posted')
return redirect(url_for("message.html",messagetext=result))
except:
return(render_template('message.html', msg="留言失败!"))
- 至此,大致的留言板的框架和基本功能已经完成,剩余的一些问题,后续学习到了解决方案会对此进行完善
*大致的效果如下:
参考文章的链接:
- 有关
python
如何操作mysql
大家可以看一下这篇文章 https://www.jianshu.com/p/7e32074e4fad
小结
- 这次的练习是针对的
python
每日一练的第23
题,到此这个专题的练习也还剩下两个练习了,总的来说经过这些练习,Python
的掌握加深了不少,虽然之前练习的一些现在又遗忘了一些,但是后续还会继续去重新复习一遍,现在趁着备考的闲余来多加一些练习,争取能有更深一步的掌握。由于前端写的太low
及这次的效果还存在问题所以这里就暂时不粘出来了\(ε=ε=ε=┏(゜ロ゜;)┛\)
Python 每日一练 | Flask 实现半成品留言板的更多相关文章
- python每日一练:0007题
第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...
- [python每日一练]--0012:敏感词过滤 type2
题目链接:https://github.com/Show-Me-the-Code/show-me-the-code代码github链接:https://github.com/wjsaya/python ...
- Python 每日一练(5)
引言 Python每日一练又开始啦,今天的专题和Excel有关,主要是实现将txt文本中数据写入到Excel中,说来也巧,今天刚好学校要更新各团支部的人员信息,就借此直接把事情做了 主要对于三种数据类 ...
- Python 每日一练(4)
引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...
- Python每日一练(1)
这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...
- Python 每日一练(3)
引言 今天的每日一练,学习了一下用Python生成四位的图像验证码,就是我们常常在登录时见到的那种(#`O′) 思路分析 正如常见的那种图像验证码,它是由数字和字母的随机组合产生的,所以我们首先的第一 ...
- Python 每日一练(2)
引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
#coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...
- Python 每日一练(7)
引言 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把xls中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...
随机推荐
- Jmeter 插件图表分析
1.jp@gc - Actiive Threads Over Time:不同时间的活动用户数量展示(图表) 当前的时间间隔是1毫秒,在 setting 中可以设置时间间隔以及其他的参数,右击可以导出 ...
- 手写实现java栈结构,并实现简易的计算器(基于后缀算法)
一.定义 栈是一种线性表结构,栈结构中有两端,对栈的操作都是对栈的一端进行操作的,那么被操作的一端称为栈顶,另一端则为栈底.对栈的操作其实就是只有两种,分别是入栈(也称为压栈)和出栈(也称为弹栈).入 ...
- Java——字符串操作
/** * java字符串操作 * @author wydream * */ public class StringTest { public static void main(String[] ar ...
- HDU1176(正推DP)
时间和位置都可以决定这一秒捡到的馅饼数 不妨设\(dp[i][j]\)为在\(i\)秒\(j\)位置的最大收益 那么\(dp[0][5]=0\),dp数组的其他部分置成-1代表不能转移 那么对于第\( ...
- 这么多Linux版本,你究竟该怎么选择?
Linux有非常多的版本,比如世面上常见的有 Ubuntu.RedHat.Fedora.Centos等等,这么多的版本我们究竟该选哪一个呢?今天我带大家对各个版本进行一下分析和比较,帮助大家来做出更好 ...
- python学习之如何一次性输出多个变量的值
如果要输出多个结果 ,中间使用逗号隔开,且引用变量为%(变量1,变量2,变量3)例如
- SAP HTTP调用其他系统接口
1业务说明 ABAP系统通过HTTP方式调用其他系统发布的接口 2代码实现 2.1认证接口 根据访问的URL创建HTTP客户端 设置访问方式,并调用SEND和接收函数 有时需要专门验证用户名密码 获取 ...
- tp5.1 nginx环境下url去掉index.php
原来的地址http://xxxxxxx/index.php/admin/login/index.html 修改完的路径http://xxxxxxx/admin/login/index.html 修改. ...
- Oracle细粒度审计
场景 管理信息化应用,想审计某张表的数据是否做了删除.Oracle中专门有自带的函数.可以满足这个需求 1.查询审计日志的语句 select timestamp, db_user, os_user, ...
- python之感知器-从零开始学深度学习
感知器-从零开始学深度学习 未来将是人工智能和大数据的时代,是各行各业使用人工智能在云上处理大数据的时代,深度学习将是新时代的一大利器,在此我将从零开始记录深度学习的学习历程. 我希望在学习过程中做到 ...