使用MVC编程模型通过flask蓝图实现前端后台新闻发布系统
相关知识点:
flask:是Python开发轻量级框架,也能很好的开发动态网站。
蓝图:flask中蓝图能很好的实现代码分割管理,从而不使代码全部放在app.py杂乱无章,蓝图就像动物管理员一样,把猫和狗分开管理。方便代码维护。
一个完整的新闻发布系统包括前端和后端,为了使前后端分离,各司其职,使用MVC编程模型。做到互不干预。
话不多说,先来看效果。
项目整体目录状况。

效果展示

下面是详细步骤:
1.新建Flask项目

建好项目内容如下:

点击又上角运行,浏览器输入ip地址及端口号显示结果:HelloWorld!

2.MVC编程模型,简介看我上一篇博文。
(1)新建三个文件夹,model,controller,因view和flask自动原生的templates组件一样,不需要新建,使用其作为视图,存放HTML前端页面。
新建文件config.py主要用来存放MySQL数据配置参数,如连接的用户名和密码。

(2)需要用到MySQL数据库,MySQL数据库安装,自行百度,注意设置密码:123456,用户名默认root;
查看是否安装成功:mysql -V

登录数据库,输入之前安装设置的用户名:root,密码:123456

进入MySQL数据库。先查看MySQL有哪些数据库。以下是我之前建好的数据库,现需要新建一个数据库。比如新闻数据库news。

新闻news数据库创建。

查看数据库是否创建成功:通过:show databases;
可以看出news数据库已经新建成功。

(3)配置数据库。config里面设置数据库连接账户。
app运行文件导入连接数据库相应包:SQLAlchemy,pymysql.
其中app运行文件把之后要写的控制器使用蓝图注册。
config.py
#root:用户,123456密码,localhost:主机名,本地ip127.0.0.1也可以,news刚才建立的数据库
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost/news?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS=False
SECRET_KEY = '123456'
app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
app.config.from_object('config')#配置数据库
db=SQLAlchemy(app) from controller.NewsPublishedController import news_app#导入控制器蓝图
app.register_blueprint(news_app,url_prefix='/news')#注册蓝图、网页浏览器地址多了前缀/news/ @app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run(debug=True);
3.创建模型类,在model文件夹下新建新闻发布NewsPublished.py类
from app import db class NewsPublished(db.Model):
#表名
__tablename__ = 'news_published'
#字段名
news_id = db.Column(db.Integer, primary_key=True)
news_title = db.Column(db.String(50))
news_content = db.Column(db.String(255)) def __repr__(self):
return 'NewsPublished:%s %s %d' % (self.news_title, self.news_content, self.news_id) #创建数据库
#删除所有的数据库
# db.drop_all()
#创建数据库
db.create_all()
注意,先运行NewsPublished.py创建数据库。查看数据库创建是否成功。可以看到已经生成表:news_published,并有三个字段。

4.创建视图,在templates新建publish_index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>新闻发布系统</title>
</head>
<body>
<h1>新闻发布系统</h1>
<form action="/news/news/" method="post">
标题:<input type="text" name="news_title">
<br>
内容:<textarea style="width: 400px;height:100px" name="news_content"></textarea>
<input type="submit" value="发布">
</form>
<table>
{% if news %}
<tr>
<th>标题</th>
<th>内容</th>
<th>操作</th>
</tr>
{% for new in news %}
<tr>
<td>{{ new.news_title }}</td>
<td>{{ new.news_content }}</td>
<td style="width: 50px"><a href="{{ url_for("news.delete_new",news_id=new.news_id) }}">删除</a></td>
</tr>
{% endfor %}
{% endif %}
</table>
</body>
</html>
5.实现控制器,在controller新建类NewPublishedController,让model和view连接,实现业务逻辑。
from flask import Blueprint, render_template, redirect,request,url_for,flash
news_app = Blueprint('news',__name__)
from app import db
from model.NewsPublished import NewsPublished # 新闻系统发布路由
@news_app.route('/news/',methods=['GET','POST'])
def news_add():
if request.method=='POST':
news_title_add=request.form.get('news_title',None)
news_content_add=request.form.get('news_content',None)
if not news_title_add or not news_content_add:
return 'input error2'
newsobj=NewsPublished(news_title=news_title_add,news_content=news_content_add)
db.session.add(newsobj)
db.session.commit()
news=NewsPublished.query.all()
return render_template('publish_index.html',news=news)
news = NewsPublished.query.all()
return render_template('publish_index.html',news=news) # 删除新闻内容,需要传入news_id.
@news_app.route('/news/<news_id>')
def delete_new(news_id):
#1.查询数据库,是否有新闻id,如果有就删除,没有就提示错误
new=NewsPublished.query.get(news_id)
#2.如果有就删除
if new:
try:
#查询之后直接删除
NewsPublished.query.filter_by(news_id=news_id).delete()
db.session.delete(new)
db.session.commit()
except Exception as e:
print(e)
flash('删除新闻出错')
db.session.rollback()
else:
#3.没有就提示错误
flash('没有新闻')
return redirect(url_for('news.news_add'))

使用MVC编程模型通过flask蓝图实现前端后台新闻发布系统的更多相关文章
- MVC 编程模型及其变种
MVC 编程模型及其变种 MVC全称是Model View Controller, 这是一个模型(model)-查看(view)-调节器(controller)缩写,这是通过通用的编程模型非.MVC当 ...
- MVC编程模型
MVC 编程模型 MVC 是三个 ASP.NET 开发模型之一. MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计: Model(模型 ...
- ASP.NET MVC编程——模型
1 ViewModel 是一种专门提供给View使用的模型,使用ViewModel的理由是实体或领域模型所包含的属性比View使用的多或少,这种情况下实体或领域模型不适合View使用. 2模型绑定 默 ...
- MVC笔记之一:MVC编程模型
MVC是ASPX.NET用于构造Web应用的一种框架,和传统的ASPX.NET开发模式(Web Form)在架构上相同,同样采用三层框架实现,但相比传输开的模式,各层架构更加规范. 传统三层架构: V ...
- 牛腩新闻发布系统(三):CSS盒子模型及其基本内容
导读: 这些天一直在做牛腩的网页,比如什么首页.出错页.新闻内容页等.在学习的不断推进中,一些刚开始理解的不是很好的东西,也逐渐的深刻了起来.下面,就对这一段时间的学习,做一个总结.主要总结内容有:盒 ...
- Atitit.web三大编程模型 Web Page Web Forms 和 MVC
Atitit.web三大编程模型 Web Page Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. ...
- Atitit.web三编程模型 Web Page Web Forms 和 MVC
Atitit.web三编程模型 Web Page Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. W ...
- ASP.NET Core MVC I/O编程模型
1. ASP.NET Core MVC I/O编程模型 1.1. I/O编程模型浅析 1.2. 同步阻塞I/O 1.3. 同步非阻塞I/O 1.4. 异步I/O 1.5. 总结 1.1. I/O编程模 ...
- [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作
[.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...
- 利用MVC编程模式-开发一个简易记事本app
学了极客学院一个开发记事本的课程,利用自己对MVC编程模式的简单理解重写了一遍该app. github地址:https://github.com/morningsky/MyNote MVC即,模型(m ...
随机推荐
- ctf命令执行刷题
web29 error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i" ...
- 达标式减量策略又一例证(STRASS研究)
标签: 类风湿关节炎; T2T策略; TNF抑制剂; 药物减停; STRASS研究 达标式减量策略又一例证(STRASS研究): RA维持期个体化减停TNF拮抗剂是可能的 电邮发布日期: 2016年1 ...
- sqlite3数据库Linux 系统移植和使用
sqlite3数据库是一个小型的数据库,当数据量不大,要求不是特别高的时候,是个不错的选择. 在Linux上移植和使用也非常的方便. 本示例是在硬件全志r528 .linux5.4 上验证的. 移植操 ...
- “堆内存持续占用高 且 ygc回收效果不佳” 排查处理实践
作者:京东零售 王江波 说明:部分素材来源于网络,数据分析全为真实数据. 一. 问题背景 自建的两套工具,运行一段时间后均出现 内存占用高触发报警,频繁young gc且效果不佳.曾经尝试多次解决,因 ...
- HttpClient 提交 JSON数据
常见数据格式 application/x-www-form-urlencoded 这也是最常见的 POST 提交数据的方式,一般是用来提交表单. multipart/form-data 上传文件时通常 ...
- stm32 出入栈
Start.S 一般指定栈顶指针及栈大小 1.硬件中断 有硬件入栈和软件入栈部分 硬件入栈寄存器: R0,R1,R2,R3,R12,PSR 软件入栈寄存器: r4 - r11 2.程序切换入栈 ...
- 2021.09 ccf csp 第四题 收集卡牌
2021.09 ccf csp 第四题 收集卡牌 思路 这题如果直接计算,因为不同的分类种数太多,枚举所有的分类情况是一个几乎不可能的复杂任务. 但不同摸牌次数,不同已摸出牌种类的子问题的答案之间,具 ...
- 面向对象基础之基础—控制台C#模拟银行ATM存取操作实例
c#控制台应用程序ATM银行操作实例.主要介绍了设计的方法:使用的类介绍:具体的运行界面:程序代码.代码直接写在一起放在Programm.cs中,拷贝可直接运行. 一.设计 1.原则上采用三层:(1) ...
- 1970:【15NOIP普及组】扫雷游戏
1970:[15NOIP普及组]扫雷游戏 时间限制: 1000 ms 内存限制: 131072 KB提交数: 5638 通过数: 3495 [题目描述] 扫雷游戏是一款十分经典 ...
- 各版本JDK及镜像仓库
Adoptium Marketplace 毕昇(华为) Dragonwell(阿里) Tencent Kona OpenJDK OracleJDK RedHatOpenJDK Temurin(ecli ...