相关知识点:

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

  1. #root:用户,123456密码,localhost:主机名,本地ip127.0.0.1也可以,news刚才建立的数据库
  2. SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost/news?charset=utf8'
  3. SQLALCHEMY_TRACK_MODIFICATIONS=False
  4. SECRET_KEY = '123456'

app.py

  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3.  
  4. app = Flask(__name__)
  5. app.config.from_object('config')#配置数据库
  6. db=SQLAlchemy(app)
  7.  
  8. from controller.NewsPublishedController import news_app#导入控制器蓝图
  9. app.register_blueprint(news_app,url_prefix='/news')#注册蓝图、网页浏览器地址多了前缀/news/
  10.  
  11. @app.route('/')
  12. def hello_world():
  13. return 'Hello World!'
  14.  
  15. if __name__ == '__main__':
  16. app.run(debug=True);

3.创建模型类,在model文件夹下新建新闻发布NewsPublished.py类

  1. from app import db
  2.  
  3. class NewsPublished(db.Model):
  4. #表名
  5. __tablename__ = 'news_published'
  6. #字段名
  7. news_id = db.Column(db.Integer, primary_key=True)
  8. news_title = db.Column(db.String(50))
  9. news_content = db.Column(db.String(255))
  10.  
  11. def __repr__(self):
  12. return 'NewsPublished:%s %s %d' % (self.news_title, self.news_content, self.news_id)
  13.  
  14. #创建数据库
  15. #删除所有的数据库
  16. # db.drop_all()
  17. #创建数据库
  18. db.create_all()

注意,先运行NewsPublished.py创建数据库。查看数据库创建是否成功。可以看到已经生成表:news_published,并有三个字段。

4.创建视图,在templates新建publish_index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>新闻发布系统</title>
  6. </head>
  7. <body>
  8. <h1>新闻发布系统</h1>
  9. <form action="/news/news/" method="post">
  10. 标题:<input type="text" name="news_title">
  11. <br>
  12. 内容:<textarea style="width: 400px;height:100px" name="news_content"></textarea>
  13. <input type="submit" value="发布">
  14. </form>
  15. <table>
  16. {% if news %}
  17. <tr>
  18. <th>标题</th>
  19. <th>内容</th>
  20. <th>操作</th>
  21. </tr>
  22. {% for new in news %}
  23. <tr>
  24. <td>{{ new.news_title }}</td>
  25. <td>{{ new.news_content }}</td>
  26. <td style="width: 50px"><a href="{{ url_for("news.delete_new",news_id=new.news_id) }}">删除</a></td>
  27. </tr>
  28. {% endfor %}
  29. {% endif %}
  30. </table>
  31. </body>
  32. </html>

5.实现控制器,在controller新建类NewPublishedController,让model和view连接,实现业务逻辑。

  1. from flask import Blueprint, render_template, redirect,request,url_for,flash
  2. news_app = Blueprint('news',__name__)
  3. from app import db
  4. from model.NewsPublished import NewsPublished
  5.  
  6. # 新闻系统发布路由
  7. @news_app.route('/news/',methods=['GET','POST'])
  8. def news_add():
  9. if request.method=='POST':
  10. news_title_add=request.form.get('news_title',None)
  11. news_content_add=request.form.get('news_content',None)
  12. if not news_title_add or not news_content_add:
  13. return 'input error2'
  14. newsobj=NewsPublished(news_title=news_title_add,news_content=news_content_add)
  15. db.session.add(newsobj)
  16. db.session.commit()
  17. news=NewsPublished.query.all()
  18. return render_template('publish_index.html',news=news)
  19. news = NewsPublished.query.all()
  20. return render_template('publish_index.html',news=news)
  21.  
  22. # 删除新闻内容,需要传入news_id.
  23. @news_app.route('/news/<news_id>')
  24. def delete_new(news_id):
  25. #1.查询数据库,是否有新闻id,如果有就删除,没有就提示错误
  26. new=NewsPublished.query.get(news_id)
  27. #2.如果有就删除
  28. if new:
  29. try:
  30. #查询之后直接删除
  31. NewsPublished.query.filter_by(news_id=news_id).delete()
  32. db.session.delete(new)
  33. db.session.commit()
  34. except Exception as e:
  35. print(e)
  36. flash('删除新闻出错')
  37. db.session.rollback()
  38. else:
  39. #3.没有就提示错误
  40. flash('没有新闻')
  41. return redirect(url_for('news.news_add'))

使用MVC编程模型通过flask蓝图实现前端后台新闻发布系统的更多相关文章

  1. MVC 编程模型及其变种

    MVC 编程模型及其变种 MVC全称是Model View Controller, 这是一个模型(model)-查看(view)-调节器(controller)缩写,这是通过通用的编程模型非.MVC当 ...

  2. MVC编程模型

    MVC 编程模型 MVC 是三个 ASP.NET 开发模型之一. MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计: Model(模型 ...

  3. ASP.NET MVC编程——模型

    1 ViewModel 是一种专门提供给View使用的模型,使用ViewModel的理由是实体或领域模型所包含的属性比View使用的多或少,这种情况下实体或领域模型不适合View使用. 2模型绑定 默 ...

  4. MVC笔记之一:MVC编程模型

    MVC是ASPX.NET用于构造Web应用的一种框架,和传统的ASPX.NET开发模式(Web Form)在架构上相同,同样采用三层框架实现,但相比传输开的模式,各层架构更加规范. 传统三层架构: V ...

  5. 牛腩新闻发布系统(三):CSS盒子模型及其基本内容

    导读: 这些天一直在做牛腩的网页,比如什么首页.出错页.新闻内容页等.在学习的不断推进中,一些刚开始理解的不是很好的东西,也逐渐的深刻了起来.下面,就对这一段时间的学习,做一个总结.主要总结内容有:盒 ...

  6. Atitit.web三大编程模型 Web Page Web Forms 和 MVC

    Atitit.web三大编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2.  ...

  7. Atitit.web三编程模型 Web Page Web Forms 和 MVC

    Atitit.web三编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. W ...

  8. 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编程模 ...

  9. [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作

    [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...

  10. 利用MVC编程模式-开发一个简易记事本app

    学了极客学院一个开发记事本的课程,利用自己对MVC编程模式的简单理解重写了一遍该app. github地址:https://github.com/morningsky/MyNote MVC即,模型(m ...

随机推荐

  1. BI工具术语表大全:从字母A-Z全面收录

    谈到商业智能行业,变革是不可避免的.为了跟上步伐,各种各样的BI 解决方案正在快速迭代更新,以满足企业的数字化需求,那么市场上BI 工具种类繁杂,到底如何选择适合功能全面.满足自己企业运转情况的.合适 ...

  2. Linux(CentOS)安装MinIo,详细教程,附防火墙端口开放操作

    Linux安装MinIo(已配置开机重启) 1,准备安装目录和文件 系统:CentOs #进入安装目录 cd /home/minio #在线下载二进制文件 wget https://dl.min.io ...

  3. redis(13)持久化操作-AOF

    AOF(Append Only File) 以日志的形式来记录每个写操作(增量保存),将 Redis 执行过的所有写指令记录下来 (读操作不记录), 只许追加文件但不可以改写文件,redis 启动之初 ...

  4. SVN提交到服务器退回至指定版本(撤销操作)

    一.撤销已提交内容如果不小心把修改错误的文件提交到服务器上去了 可对其进行复原(指定单个文件撤销) 解决方法: 查看修改的日志 查看错误提交的文件 可以查看到这个文件改了什么 复原此版本作出的修改 然 ...

  5. Linus对Linux 6.3内核的合并解释不满

    Linux 6.3 内核的合并窗口已开启,Linus Torvalds 也收到了大量的 PR,目前总体看来正在有序进行.但 Linus 对部分合并请求的日志信息非常不满:"我之前就已经说过, ...

  6. WPF使用WindowChrome自定义标题栏

    第一步:基本实现 添加Window的Style定义,并设置WindowChrome.WindowChrome属性: 设置WindowChrome标题栏: CaptionHeight--主要用于拖动有效 ...

  7. 2022-02-17 Python学习笔记

    2022-02-17 22:51:30 由于中文注释会导致报错,所以文件开头要加一行注释 #coding:utf-8 file = open('文件路径路径',w)#w表示没有就创建文件,有就打开 查 ...

  8. python 获取近几周日期

    import datetimedef get_Next_day(count): today = datetime.datetime.today().date() for i in range(coun ...

  9. Java面向对象之什么是多态?

    多态 动态编译:类型:可扩展性 即同一方法可以根据发送对象的不同而采用多种不同的行为方式. 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多. 多态存在的条件: 1.有继承关系,类型转换异 ...

  10. 【Java SpringBoot】RestTemplate使用postForObject发送请求,接收String类型的response时中文乱码

    https://blog.csdn.net/qq_43758789/article/details/120576717 使用RestTemplate发送PostForObject的时候会出现乱码.这是 ...