博客项目续

# 博客项目

### 昨日内容完善

- 密码加密存储

  ```python
  from werkzeug.security import generate_password_hash, check_password_hash

  # 用户模型
  class User(UserMixin, db.Model):
      id = db.Column(db.Integer, primary_key=True)
      username = db.Column(db.String(20), unique=True)
      password_hash = db.Column(db.String(128))
      email = db.Column(db.String(32), unique=True)
      confirmed = db.Column(db.Boolean, default=False)

      @property
      def password(self):
          raise AttributeError(‘你想干啥,密码不可读‘)

      @password.setter
          def password(self, password):
              self.password_hash = generate_password_hash(password)

      # 密码校验
      def verify_password(self, password):
          return check_password_hash(self.password_hash, password)
  ```

- 带有效期的token

  ```python
  from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
  from itsdangerous import SignatureExpired, BadSignature

  @main.route(‘/generate/‘)
  def generate():
      s = Serializer(current_app.config[‘SECRET_KEY‘], expires_in=10)
      token = s.dumps({‘id‘: 250})
      return token

  @main.route(‘/check/<token>/‘)
  def check(token):
        s = Serializer(current_app.config[‘SECRET_KEY‘])
      try:
          data = s.loads(token)
      except SignatureExpired as e:
          return ‘token已过期‘
      except BadSignature as e:
          return ‘无效token‘
      return str(data[‘id‘])
  ```

### 用户信息管理

- 用户详情
- 练习:修改密码、修改邮箱、找回密码
- 修改头像
  - 添加点击跳转的逻辑
  - 添加flask-uploads扩展
  - 设计上传文件表单,创建并渲染
  - 校验处理上传文件,保存图片
  - 生成随机文件名
  - 生成缩略图
  - 将新的头像保存到数据库中
  - 删除原来的头像文件

### 博客管理

- 发表博客

  - 设计博客模型,并且完成迁移
  - 设计发表博客表单类,并创建渲染
  - 提交后的校验(创建博客对象,保存到数据库)

- 列表显示发表的博客(查询数据,分配到模板,然后遍历渲染)

- 分页显示发表的博客(分页查询)

  ```
  方法:paginate,分页查询
      参数:
            page:当前的页码
            per_page:每页的条数
            error_out:当查询出错时是否报错
      返回值:
           Pagination:分页对象,包含了所有的分页信息
  Pagination:
      属性:
          page:当前页码
          per_page:每页的条数,默认为20条
          pages:总页数
          total:总条数
          prev_num:上一页的页码
          next_num:下一页的页码
          has_prev:是否有上一页
          has_next:是否有下一页
          items:当前页的数据
      方法:
          iter_pages:返回一个迭代器,在分页导航条上显示的页码列表,显示不完的时返回None
          prev:上一页的分页对象
          next:下一页的分页对象
  ```

- 封装分页显示的宏

  ```html
  {% macro show_pagination(pagination, endpoint) %}
      <nav aria-label="Page navigation">
          <ul class="pagination">
              {# 上一页 #}
              <li {% if not pagination.has_prev %}class="disabled"{% endif %}>
                  <a href="{% if pagination.has_prev %}{{ url_for(endpoint, page=pagination.prev_num, **kwargs) }}{% else %}#{% endif %}" aria-label="Previous">
                      <span aria-hidden="true">&laquo;</span>
                  </a>
              </li>

              {# 中间页码 #}
              {% for p in pagination.iter_pages() %}
                  {% if p %}
                      <li {% if pagination.page == p %}class="active"{% endif %}><a href="{{ url_for(endpoint, page=p, **kwargs) }}">{{ p }}</a></li>
                  {% else %}
                      <li><a href="#">&hellip;</a></li>
                  {% endif %}
              {% endfor %}

              {# 下一页 #}
              <li {% if not pagination.has_next %}class="disabled"{% endif %}>
                  <a href="{% if pagination.has_next %}{{ url_for(endpoint, page=pagination.next_num, **kwargs) }}{% else %}#{% endif %}" aria-label="Next">
                      <span aria-hidden="true">&raquo;</span>
                  </a>
              </li>
          </ul>
      </nav>
  {% endmacro %}
  ```

### 练习:

- 点击用户头像或用户名,跳转到该用户发表的所有博客展示页码,显示不完分页展示
- 点击博客内容跳转到该篇博客的详情页面(博客信息、回复表单、所有回复(可以分页))
- 将导航条上的‘板块一‘改为‘我的发表‘

原文地址:https://www.cnblogs.com/liangliangzz/p/10222041.html

时间: 2024-10-08 17:24:25

博客项目续的相关文章

博客项目实现文章评论功能(重点是评论回复)

我开发的博客网站的地址:http://118.89.29.170/RiXiang_blog/ 博客项目代码github:https://github.com/SonnAdolf/sonne_blog 有了我的已成型的项目和代码,可以更容易理解这篇文章. 本篇文章记录下自己博客项目评论功能实现的全过程,重点其实是评论回复功能. [一,写评论] 写评论部分我没有使用富文本编辑器,只是单纯地使用了textarea标签,所以后台不需要作html标签的白名单检验(关于防范xss攻击,可以看我之前的一篇文章

Django博客项目之首页

一.Django-admin 1.创建表和注册表 settings.py文件: TIME_ZONE = 'Asia/Shanghai'    #支持中文数据 models.py文件内容: from django.db import models from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):     """     用户信息     ""&q

Django——博客项目

博客项目 目前的目标是构建一个基于Django的前后端完整的博客系统,首先对项目流程整理如下: 1. 分析需求 1.1. 1.基于用户认证组件和Ajax实现登录验证 1.2. 基于forms组件和Ajax实现注册功能 1.3. 设计系统首页(文章列表渲染) 1.4. 设计个人站点页面 1.5. 文章详情页 1.6. 实现文章点赞功能 1.7. 实现文章的评论 1.7.1. 文章的评论 1.7.2. 评论的评论 1.8. 富文本编辑框和防止xss攻击 2. 设计表结构 module代码: from

博客项目需求分析

# 博客项目 ### 需求分析 - 用户注册登录 - 用户信息管理 - 博客发表回复 - 博客列表展示 - 博客分页展示 - 博客收藏 - 搜索.统计.排序.... ### 目录结构 ``` blog/ # 项目根目录 manage.py # 启动控制代码 requirements.txt # 依赖包类表文件 venv/ # 虚拟环境目录 migrations/ # 数据库迁移目录 tests/ # 测试模块目录 app/ # 整个程序目录 templates/ # 模板文件目录 common/

Node.js 从零开发 web server博客项目

第1章 课程介绍 包括课程概述.核心模块.核心技术.课程安排.课程收获.讲授方式.学习前提等方面的介绍,让同学们对课程项目有一个直观的了解. 1-1 课程导读 试看第2章 nodejs 介绍 本章主要为了照顾尚未入门或者刚刚入门 nodejs 的同学,介绍 nodejs 的下载.安装和基本使用,以及 nodejs 和前端 javascript 的区别.另外,重点介绍了服务端开发和前端开发思路上的区别,为后续的开发做一个基础的铺垫. 2-1 下载和安装 2-2 nodejs和js的区别 2-3 c

Node.js 从零开发 web server博客项目 前端晋升全栈工程师必备

第1章 课程介绍包括课程概述.核心模块.核心技术.课程安排.课程收获.讲授方式.学习前提等方面的介绍,让同学们对课程项目有一个直观的了解. 第2章 nodejs 介绍本章主要为了照顾尚未入门或者刚刚入门 nodejs 的同学,介绍 nodejs 的下载.安装和基本使用,以及 nodejs 和前端 javascript 的区别.另外,重点介绍了服务端开发和前端开发思路上的区别,为后续的开发做一个基础的铺垫. 第3章 项目介绍课程是通过案例的形式来学习 nodejs ,本章先来介绍这个案例,即个人博

Node.js Express博客项目实战 之 系统设置

系统设置在侧边栏的系统管理中: 在视图views的后台index.html中对应的系统设置写入跳转的路由: <li><a href="/admin/system" target="right"><span class="icon-caret-right"></span>系统设置</a></li> 在后台路由中进行注册该路由system.js // 系统管理 let syste

一款基于vue.js 和node构建个人博客项目

前言 本项目是一款个人学习的博客项目,主要是为了学习vue2 和 node.js.另外涉及到MySQL redis nginx 等技术栈知识 项目地址 预览地址 (PC或者手机) > 注意:PC端支持markdown编辑博客,但是手机端不支持编辑,仅支持查看博客内容 博客预览地址:node后台版本 预览账号 账号:test 密码:123 技术栈 前端:html.css.sass.ES6.webpack.vue-cli.vue2.vuex.vue-router.axios.element-ui 后

服务器部署 halo博客项目

2020-2-13 13:58:37 前几天抢到了阿里云学生免费服务器6个月的. 顺便部署了一个自己的博客项目  halo 开源的 https://halo.run/ 看里面的linux部署就行了,然后配置了nginx   的conf  ,然后正常启动了 http://chentianxiang.vip/  我的网站!!! 感觉很是开心啊! 虽然说项目是java的,然后linux部署还是不算太难,毕竟有以前的经验啦! 哈哈哈哈哈哈! 反正开学尚早,在家看专业课,做数学,宅家里!疫情还没结束!!