第一步:构建文章和分类数据模型(models.py)

这里我们使用的关系型数据库。创建一个sql_test.py文件,复制以下内容。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
from datetime import datetime
basedir = os.path.abspath(os.path.dirname(__file__))app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DETABASE_URI') or \'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
db = SQLAlchemy(app)class Category(db.Model):id = db.Column(db.Integer, primary_key=True)tag = db.Column(db.String(64))count =db.Column(db.integer, default=1)def __init__(self, tag):self.tag = tagdef __repr__(self):return '<Category %r>' %self.tagclass Post(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(64))body = db.Column(db.Text)timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 时间戳def __init__(self, title, body):self.title = titleself.body = bodydef __repr__(self):return '<Post.title %r>' %self.title

在该文件目录下,打开python shell,引入这个py文件,并输入一些数据

from sql_test import db, Category, Post
db.create_all() #创建表
cat = Category('python')
post = Post('python','hello python')
db.session.add(cat)
db.session.add(post)
db.session.commit() #提交

建立两者的关系

使用post中的<b>外键</b>category_id连接两行

关系

class Post(db.Model):
....category_id = db.Column(db.Integer, db.ForeignKey('category.id'))category = db.relationship('Category',backref=db.backref('posts', lazy='dynamic'))

添加的category_id在Column中用db.Foreignkey定义为外键,表明这行的值为Category的id值

添加的category属性代表这个关系的面向对象视角。db,relationship()的第一个参数表明这个关系的另一端哪个模型(这里是category),backref参数在关系的另一端(category)添加一个posts属性,lazy指定如何加载相关记录,dynamic表明不加在记录,但提供加载记录的查询。

建立新的数据表并导传入数据

db.drop_all() # 数据模型变了,所以要先删掉原先的表格
db.create_all()
py = Category('Python')
p1 = Post('Hello Python!', 'Python is pretty cool', py)
p2 = Post('Hello again!', 'Python is pretty cool', py)
db.session.add_all([py,p1,p2])
db.session.commit()>>>py.posts.all()
[<Post.title 'Hello Python!'>, <Post.title 'Hello again!'>]
一对多关系

视图函数(views.py)

@main.route('/')
def index():...
category = Category.query.order_by(Category.count)[::-1]return render_template('index.html', categorys=category)

模板(index.html)

最重要的就是{% for category in categorys %} {{ category.count }},其他都是css样式

    <div class="col-md-3"><div class="share mrl the-font" style="background-color:#FFF;box-shadow:5px 5px 20px #CCC;width:260px;"><div style="padding:10px;"><div style="border-bottom:1px solid #DAD4D4;;padding:10px 10px;"><h5><span class="glyphicon glyphicon-leaf" aria-hidden="true"></span>CATEGORY</h5></div><ul>{% for category in categorys %}<li class="presentation" style="padding-top:0px;"><a href="/category/{{ category.tag }}" ><p><span style="font-size:15px;">> {{ category.tag|upper }}</span><span class="badge text-right" style="float:right">{{ category.count }}</span></p></a></li>{% endfor %}</ul></div></div>

Flask中制作博客首页的分类功能(一)相关推荐

  1. 使用python和flask建个人博客---增加一个新功能:点击主页图片的时候能够跳转到指定的网页

    蜗牛笔记的主页主要有两个html文件,一个是index.html,一个是type.html,index.html是这个博客的主页,type.html是点击不同的文章类型的时候的页面,这些页面也可以设计 ...

  2. 装饰博客全攻略(如何在博客首页或博客中插入图片、音乐、视频等)

    一.在博客中插入图片. 以下是代码: <img src="http://图片地址" border="0" width="344" he ...

  3. python开发个人博客_手把手教你用 Python + Flask 搭建个人博客

    Python 的语言特性使得自身编写 Web 框架极其容易,现在已经有上百种用 Python 编写的 Web 开发框架,其中用户量最大的两个就是 Django 和 Flask. Django 和 Fl ...

  4. Django 博客开发教程 6 - 真正的 Django 博客首页视图

    在此之前我们已经编写了 Blog 的首页视图,并且配置了 URL 和模板,让 Django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应.不过我们仅仅在首页返回了一句话:欢迎访问我的博客 ...

  5. Flask开发轻博客(一):欢迎来到-Flask-的世界

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 目录 Flask开发轻博客(一):欢迎来到 Flask 的世界 Flask开发轻博客(二):Flask ...

  6. Flask开发轻博客(一):欢迎来到 Flask 的世界

    目录 Flask开发轻博客(一):欢迎来到 Flask 的世界 Flask开发轻博客(二):Flask 模板 Flask开发轻博客(三):Flask 的 Web 表单 Flask开发轻博客(四):数据 ...

  7. 如何用php制作博客网页,博客网页制作的网站

    博客网页制作的网站 1.制作一个自己的印章. 2.EOOOL是QQ头像.MSN头像.论坛头像.论坛签名.博客广告.通讯工具(邮件. MSN.QQ.书签)等的标签快速生成工具,一个方便.实用的图片制作网 ...

  8. Flask实现个人博客系统(附源码),java面试说我基础太差

    登录 {% endif %} {% block content %} {# 其他页面内容 #} {% endblock %} 这里页面使用了Layui定义了一个导航栏,展示了对应的功能模块.其中{% ...

  9. 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程

    使用vue全家桶制作博客网站 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vu ...

最新文章

  1. python和java和scala_有没有与python3相当的scala/java收藏。国家
  2. Data Lake Analytics: 读/写PolarDB的数据
  3. WINCE流驱动的自动加载
  4. 提高抗打击能力_输不起、爱放弃,孩子抗挫能力差怎么办?3招教你培养孩子抗挫力...
  5. pdf python 位置_如何使用PDFMiner获取PDF中文本的位置?
  6. LAMP攻略: LAMP环境搭建,Linux下Apache,MySQL,PHP安装与配置
  7. c语言如何把变量按位颠倒,求答案,用C语言编程,用户输入一个正整数,把他的各位数字前后颠倒,并输入点到后的结果...
  8. 求你了,别再说数据库锁的只是索引了!!!
  9. 练习4-11 统计素数并求和(20 分)
  10. [leetcode] 554. 砖墙
  11. ipmi 修改服务器密码,通过ipmi方式重设dell远程控制卡的密码
  12. C#中奇怪的Queue T 行为!
  13. UniCode编码表 对照表
  14. zlx生病.高热惊厥_zc20180306
  15. topcoder使用
  16. 室友利用一把王者的时间就学会了【C语言结构体内存对齐】
  17. 基于MTCNN卷积神经网络的人脸识别
  18. 使用Snake代理跳板
  19. 如何编辑PDF文件?简单好用的编辑方法分享
  20. JavaEE入门级别最全教程1--初学者必看

热门文章

  1. 【Oracle】手工建库
  2. JUnit报错:Java.lang.Exception: No runnable methods解决方案
  3. 利用PhantomJS进行网页截屏,完美解决截取高度的问题
  4. 无法连接Elasticsearch解决方案
  5. 【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它
  6. Spring Boot 2.X 如何优雅的解决跨域问题?
  7. HBase中此类异常解决记录org.apache.hadoop.ipc.RemoteException(java.io.IOException):
  8. 如何在现代C ++中实现经典排序算法?
  9. Win7磁盘清理怎么操作?十步让你学会
  10. java decompiler 3.11_Java反编译软件(DJ Java Decompiler)下载 v3.11.11.95官方版-第五资源...