flask实战-个人博客-视图函数】的更多相关文章

视图函数 在上面我们创建了所有必须的模型类.模板文件和表单类.经过程序规划和设计后,我们可以创建大部分视图函数.这些视图函数暂时没有实现具体功能,仅渲染对应的模板,或是重定向到其他视图.以blog蓝本为例,如下所示: personalBlog/blueprints/blog.py: 创建视图函数 #encoding=utf-8 from flask import render_template, Blueprint blog_bp = Blueint('blog', __name__) @blo…
使用工厂函数创建程序实例 使用蓝本还有一个重要的好处,那就是允许使用工厂函数来创建程序实例.在OOP(Object-Oriented Programming,面向对象编程)中,工厂(factory)是指创建其他对象的对象,通常是一个返回其他类的对象的函数或方法,比如我们之前的例子中创建的WTForms验证器(函数).在personalBlog程序中,程序实例可以设计为在工厂函数中创建,这个函数返回程序实例app.按照惯例,这个函数被命名为create_app()或make_app().我们把这个…
个人博客 博客是典型的CMS(Content Management system,内容管理系统),通常由两部分组成:一部分是博客前台,用来展示开放给所有用户的博客内容:另一部分是博客后台,这部分内容仅开放给博客管理员,用来对博客资源进行添加.修改和删除等操作. 在这个项目,我们会学习更高级的项目组织方式.另外,我们还会学习使用扩展Flask-Login实现用户认证,这样就可以区分请求的来源客户端的身份,然后根据不同的身份返回不同的响应. 安装和激活虚拟环境 D:\flask\personalBl…
使用蓝本模块化程序 实例化flask提供的blueprint类就创建一个蓝本实例.像程序实例一样,我们可以为蓝本实例注册路由.错误处理函数.上下文处理函数,请求处理函数,甚至是单独的静态文件文件夹和模板文件夹.在使用上,它和程序实例也很相似.比如,蓝本实例同样拥有一个route()装饰器,可以用来注册路由,但实际上蓝本对象和程序对象却有很大的不同. 实例化Blueprint类时,除了传入构造函数的第一个参数是蓝本名称之外,创建蓝本实例和使用flask对象创建程序实例的代码基本相同.例如,下面的代…
编写博客前台 博客前台需要开放给所有用户,这里包括显示文章列表.博客信息.文章内容和评论等功能功能. 分页显示文章列表 为了在主页显示文章列表,我们要先在渲染主页模板的index视图的数据库中获取所有文章记录并传入模板: blueprints\blog.py: from personalBlog.models import Post @blog_bp.route('/') def index(): posts = Post.query.order_by(Post, timestamp.desc(…
电子邮件支持 因为博客要支持评论,所以我们需要在文章有了新评论后发邮件通知管理员.而且,当管理员回复了读者的评论后,也需要发送邮件提醒读者. 为了方便读者使用示例程序,personalBlog中仍然使用Flask-Mail来发送邮件.读者在运行程序前需要在项目根目录内创建.env文件写入对应的环境变量,以便让发信功能正常工作. 因为邮件的内容很简单,我们将直接在发信函数中写出正文内容,这里只提供了HTML正文.我们有两个需要使用电子邮件的场景: 1.当文章有新评论时,发送邮件给管理员: 2.当某…
模板 personalBlog采用典型的博客布局,左侧三分之二为主体,显示文章列表.正文:右侧三分之一为边栏,显示分为类列表.社交链接等.现在的工作是将HTML文件加工为模板,并创建对应的表单类,在模板中渲染. 并非所有的页面都需要添加边栏,所以我们不能把它放到基模板中.为了避免重复和易于维护,我们把边栏部分的代码放到了局部模板_sidebar.html中.除了基模板base.html和存储宏的macros.html模板,personalBlog程序的博客前台使用的模板如下所示: index.h…
3.生成虚拟数据 为了方便编写程序前台和后台功能,我们在创建数据库模型后就编写生成虚拟数据的函数. 1)管理员 用于生成虚拟管理员信息的fake_admin()函数如下所示: personalBlog/fakes.py: 生成虚拟管理员信息 from personalBlog.models import Admin from personalBlog.extensions import db def fake_admin(): admin = Admin( username = 'admin',…
表单 下面我们来编写所有表单类,personalBlog中主要包含下面这些表单: 登录表单: 文章表单: 评论表单: 博客设置表单: 这里仅介绍登录表单.文章表单.分类表单和评论表单,其他的表单在实现上基本相同. 删除资源也需要使用表单来实现,这里之所以没有创建表单类,是因为后面我们会介绍在实现删除操作时为表单实现CSRF保护的更方便的做法. 1.登录表单 用于登录的LoginForm表单类的实现如下所示: personalBlog/forms.py: 登录表单 from flask_wtf i…
编写程序骨架 personalBlog的功能主要分为三部分:博客前台.用户认证.博客后台,其中包含的功能点如下图所示: 数据库 personalBlog一共需要使用四张表,分别存储管理员(Admin).分类(Category),文章(Post)和评论(Comment). 1.创建数据库模型 1)管理员 如果是编写一个固定的个人博客,那么事情就要简单得多,博客的大部分固定信息(比如博客标题,页脚信息等)都可以直接写死在模板中,或是使用自定义的配置存储在配置文件中.但是我们希望编写的是一个通用的博客…
使用类组织配置 在实际需求中,我们往往需要不同的配置组合.例如,开发用的配置,测试用的配置,生产环境用的配置.为了能方便地在这些配置中切换,你可以把配置文件升级为包,然后为这些使用场景分别创建不同的配置文件,但是最方便的做法是在单个配置文件中使用python类来组织多个不同类别的配置. 下面的代码是personalBlog的配置文件,现在它包含一个基本配置类(BaseConfig),还有其他特定的配置类,即测试配置类(TestingConfig).开发配置类(DevelopmentConfig)…
需求: 真正的首页视图函数,当用户访问我们的博客首页时,他将看到我们发表的博客文章列表,就像 演示项目 里展示的这样.t https://docs.djangoproject.com/en/1.10/howto/static-files/ 编写博客视图函数 从数据库获取文章的标题,将其作为模板变量传递到模板,所以视图函数 # coding=utf8 from django.shortcuts import render from django.http import HttpResponse f…
Vue实战狗尾草博客后台管理系统第一章 这里准备采用的技术栈为:vue全家桶+element-ui 这里因为是后台管理系统,没有做SSR的必要.所以这里就采用前后端分离来昨晚这个项目~ 项目搭建 vue init webpack gwc_manage  初始化过程中,会让我们进行一些依赖包,项目配置的基本选择.项目名称,作者信息,描述,是否安装路由,eslint,测试单元,npm/yarn. 这里不选择安装eslint和测试单元.用过的人应该知道非常酸爽. 项目初始化成功后, npm run d…
https://blog.csdn.net/hyman_c/article/details/53512109 一  current_app current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活,我们以本专栏第一篇文章中写的test.py为例介绍下它的用法: 1.1 激活程序上下文 >>> from test import app >>> from flask import current_app >>> from f…
Vue实战狗尾草博客后台管理平台第七章 本章内容为借助模块化来阐述Vuex的进阶使用. 在复杂项目的架构中,对于数据的处理是一个非常头疼的问题.处理不当,不仅对维护增加相当的工作负担,也给开发增加巨大的压力. 在大量的实战开发过程中,狗尾草总结出来的较为友好的方式是 使用一个单独的数据管理库去管理数据. 这样不会给页面增加额外的负担.且API的调用也属于数据处理/获取的部分.因此也放在数据管理下统一管理 注:本章节内容与狗尾草博客管理平台没有任何关系,仅作为Vuex的进阶使用来分享 对模块化的简…
Flask搭建个人博客网站(1)—项目规划--李渣渣(lizaza.cn) 发布时间:2020-05-2413次浏览 前言 现在市面上又许多比较成熟的博客平台,例如:CSDN,博客园,新浪博客等!对于想要自己搭建的人也有许多主流的开源博客系统,如:WordPress.Z-Blog.Typecho.CMS.Ghost等. 可能是由于程序员的情节,必须完全可控才觉得安全,因此才有了自己开发博客系统的想法. 定位     轻量个人博客 层次结构 系统环境 CentOS 7 Python Flask M…
提交和显示博客文章 app/models.py 文章模型 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) timestamp = db.Column(db.DateTime,index=True,default=datetime.utcnow) author_id=db.Column(db.Integer,db.…
数据库代码块 from django.db import models from django.utils import timezone from django.contrib.auth.models import User # Create your models here. class BlogArticles(models.Model): title = models.CharField(max_length=30) author = models.ForeignKey(User,rel…
1上网的流程: 打开浏览器,输入网址(http://zmrenwu.com/) 浏览器根据输入网址,完成以下几件事:1识别服务器地址,2将用户的浏览意图打包成一个http请求,发送给服务器,等待服务器响应请求 服务器接收到请求后,根据请求从数据库查询,取出数据,并将这些数据嵌入到html中,打包成http响应,返回给浏览器 浏览器接收到响应,解读响应,把html文档解析并显示给用户 从上面的流程来看,django就是一个服务器,其主要解决问题:接收浏览器发送的请求,返回响应给浏览器 从而,会产生…
对某博客的代码审计 在gitee上面找了一个个人博客项目,来进行实战代码审计,主要还是学习为主 技术菜菜,哪里错误希望师傅们指正 1.SQL注入 先了解Java Web中的数据传输流程 graph TB id1(Controller.java 处理前台发送的请求) id1-->id2(Service.java 定义接口_业务逻辑) id2-->id3(ServiceImpl.java 对接口函数进行实现) id3-->id4(Mapper.java Mapper接口) id4-->…
一.PTA实验作业 题目1:6-6 使用函数输出水仙花数 1.本题PTA提交列表 2. 设计思路 int narcissistic( int number ) //函数定义 1.定义整数型变量a.i分别来存放number分离的出来的数和进行digit次幂运算的循环次数 2.定义x=number,b=1,c=number,sum=0,定义整数型变量digit来存放位数 3.利用循环求出数的位数 for(digit=1;;digit++){ x=x/10;if(x==0){break;}} 4.a=…
打算利用业余时间好好研究Python的web框架--web.py,深入剖析其实现原理,体会web.py精巧之美.但在研究源码的基础上至少得会用web.py.思前想后,没有好的Idea,于是打算开发一个csdn博客专栏下载器,界面不是很好看,还过得去吧. 效果图如下: 为了简单,下载以html格式保存. 下载我自己的博客专栏,目录列表 主界面html文件非常简单,如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN…
这几天在学习Flask, 遇到了些小问题,比如说怎么给多个视图函数加相同的装饰器 给单独一个视图函数加装饰器的话很简单,写一个装饰器,然后直接加在原装饰器下面即可,多个的话,会报这样一个错误: 这个异常信息,说明定义了多个同名的视图函数,只需要改成不同的函数名即可 但是文件中没有重名的函数, 搞了半天原来是装饰器的问题, 装饰器也是函数啊 来看看怎么给多个函数加相同的装饰器…
Vue实现狗尾草博客后台管理系统第六章 本章节内容 文章列表 文章详情 草稿箱 文章发布. 本章节内容呢,开发的很是随意哈,因为多数就是element-ui的使用,熟悉的童鞋,是可以很快完成本章节的内容的. 为啥文章模块会有这么多东西呢? 因为狗尾草想着以后,文章如果是待发布的话就需要一个地方去存放起来,一开始删除的文章呢,也将会被移入到草稿箱中,这样的话,文章就不会被随便的更改啦. 文章列表 先给大家一张效果图 是不是感觉非常轻松,一个table就可以搞定, 这里的代码呢,我就直接贴出来,因为…
本章主要内容如下: 静态资源服务器的配置.学会如何使用静态资源服务器引入静态资源.并给大家推荐一个免费可使用的oss服务器~ 页面的开发由于近期做出的更改较大.就放在下一篇中. 静态资源服务器 静态资源服务器一般我叫他oss服务器,我们一般都会将一些静态资源文件,比如图片或者其他的视频,音频文件,脚本文件等都可以进行存放.而我们在开发中也仅仅通过连接引入即可进行使用.减少了本地图片的加载.在通过CDN加速后,起响应速度也不用担心啦~ 免费的静态资源服务器体验 七牛云确实是一个挺良心的平台哈.说真…
本章主要内容如下: 填补上期的坑. iconfont仓库的关联,引入. 开发登录页面 填坑 上期中我们功能都已正常使用.但不知道有没有小伙伴测试过error页面,当访问地址不存在时,路由是否能正常挑战error页面. 其实是不能的,因为上期的路由配置中,对404,页面及通配符页面的auth没有关掉,导致,在没有登录的情况下,404页面是进不去的.必须先进行登录.所以这是不合适的.这里大家需要先关掉auth. router>permission.js文件中,我们在校验到没有登录的时候会跳转到登录页…
伙伴们出来啦,探讨各问题,关于项目中大量的表单,大家是怎么处理的? 本章主要内容如下:底层布局,路由配置,github仓库推送关联. 关联GitHub仓库 关联建立在github已创建账号的基础上 登录自己的Github账号 新建项目 然后根据自己的情况添加名称和描述 新建完成后,我们只需要按照提示的信息一步一步完成即可 复制命令行到项目终端,回车即可实现推送. 为了验证推送的readme.md文件我们刷新github,即可看到自己添加的readme文件已经才存在仓库之中,下来我们就需要添加项目…
一.视图函数 1.1 基本用法试图函数是 app.route 或者 bp.route(蓝图)装饰器装饰的函数.该函数实现了对URL路径的转换,也就是路由功能,例如下面代码定义了默认url ‘/’ 和‘/index/’的url请求. @app.route('/') @app.route('/index/') def hello_world(): return 'hello world' 试图函数可以指定http请求方法,在route装饰器中传入methods参数 @app.route('/logi…
Vue实现狗尾草博客后台管理系统第三章 本章节,咱们开发管理系统侧边栏及面包屑功能. 先上一张效果图 样式呢,作者前端初审,关于设计上毫无美感可言,大家可根据自己情况设计更好看的哦~ 侧边栏 这里我们借助element的aslide侧边栏,直接使用. 在components>commons下新建Aslide.vue,Header.vue组件.分别作为我们的侧边栏和头部组件. Aslide内容,我们直接使用el-menu及相关侧边栏组件.不过要仔细阅读以下官方文档,否则使用会比较费劲. colla…
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #语法:CREATE VIEW…