说在前面

也不知道最后能不能完成网站,所以就想把这十多天来学习到的点点滴滴记录下来。学的越来越多,所谓全栈也是需要前端基础,越来越感受到压力,但是遇到一个问题就解决一个问题,慢慢习惯之后感觉也还行。说句实话,一年之前的高三寒假都没我现在这么忙。

补一下

网站已经做出来了(我的Github)

正文

1、明确需求,对于登录登出以及注册的页面,我用到了Flask框架,Flask-SQLAlchemy用于链接数据库、Flask-wtf用于制作登录表单。

2、各个框架使用

  • (1)Flask

    • 首先是视图函数的定义,我常常在请求里忘记加上methods=['GET', 'POST']用于标记对该网址的请求
    • 对于Flask下的render_template函数,千万记得前端模板要放在templates文件夹里,也千万记得前面用return返回,否者函数没有返回值,出错。
    • 对于flash,建议在pycharm将templates文件夹标记为模板文件夹,这样在对模板文件夹进行编写的时候会有语法提示,比较方便打,比如对于flash函数在模板中的get_flashed_messages()要么少加括号,要么就是少加s。
    • 对于redirect和url_for,这两个经常搭配使用的,我总结一下,就是redirect相当与return render_template一个模板,我没有去探求这两个异同,大概就是redirect可以加上一个next=的参数,用于干什么我也不知道,而return render_template则是在视图函数中用于给模板传参数的。url_for可以拼接网址,里面直接填入的是视图函数的函数名,因为这个我困扰大小写许久,最后才明白,后面可以怕拼接自己任意的定义的网址,只需加上对应的参数=我传入的参数。
    • session这个我是又爱又恨,虽然我不知道更多用户登录之后会不会出现问题,但是基于目前状况,暂且先按我理解的,用于保存用户,如果用户退出则删掉session中的数据,否者我构造的其他人只要加上一个域名就可以登录,那太荒唐了,基于之前对爬虫的深入复习,我暂且对与cookie还是理解的,学习视频里的构造了一个装饰器,那个玩不来,自己探究,只要在视图函数内加上一个判断,判断session里的user是不是我传入的那个就好了
  • (2)Flask-SQLAlchemy
    • 这个的出现,是我不得不面对自己在学习python过程中最不愿意接触的两样东西:MySQL和类,但是困难总是要克服的,在学习过后,觉得这两个其实也就那样。
    • 首先是考虑各种数据的需求,其次是外键的链接,到现在还是不是很清楚外键中backref参数的设置,暂且就认为是填本身的__tablename__,说到这,不得不提一下table后要跟上name,否者报错十分的不好找。其次我记忆外键链接的方法是一对多,那么一处为relationship,多处为ForeignKey,这里还有多对多的外键链接方式,我没有深入学习,所以不作阐述希望日后可以学习一下,但是由于对MySQL不够熟悉,所以可能要到几年后教到MySQL再回头看看,其实学一学MySQL,开始以为这东西是“上古时代”的产物,现在早已不是主流,但是越来越发现其实MySQL和C一样都给人一种可靠的感觉。
    • 这里踩了一个雷,由于之前定义变量的时候本来是video_id,但是看网课手快打成了movie_id,后面直接改回来,出现问题,纠结一个下午,最后请教学长,看了MySQL里的表才发现错误,表里没有video_id这个东西,导致一直报错,提醒以后如果改了数据模型,一定要到重新建表,否则报错十分难找。
    • 学到分页,我本以为会十分难搞,但是查阅资料得知可以直接使用SQLAlchemy里的paginate方法,在查阅数据库的时候直接进行分页,只要设置paginate里的page和per_page两个属性就可以了,再有就是导航栏的设置,其中我直接借鉴了网课的模板,但是我没有采用像网课一样的另外写一个html文件然后在各个文件里引用而是直接在每一个文件里都写一段,一来比较稳定,二来其实对于html文件的继承调用还不是很熟悉,大概了解一下就是类似函数一样的调用,使用macro方法···,没有深入研究。
  • (3)Flask-wtf
    • 这个也算是踩雷最多的一个点吧,总的就是与html不够协调,html5的功能强大,已经可以自己完成对错误信息的提醒,而且对于html5还只是稍微看两个基本语法,老是因为表单的各种各样问题而困扰。
    • 第一个就是在自己定义的表单类里需要设置一个render_kw,里面设置"placeholder": "请输入用户名"和"required": False,这样可以在输入框里提示placeholder里的内容,其次,需要设置"required": False,这样才可以提示在··Required里的报错信息,否者html5过于智能的自动报错,虽然报的专业,但是千篇一律,不够个性化|>_<|。
    • 第二个就是在render_kw里设置css的识别属性,虽然我还不会,但是大概知道有这么个功能,觉得render_kw里的内容就是正常写在标签里的内容。
    • 这个是最坑的一个点,困扰了非常久,而且因为某位学长记性不好,忘记了这个大雷,我。就是文件上传提交需要在表单的form标签里添加enctype="multipart/form-data",大概是什么文件上传协议什么的,如果不添加的话,那么上传到后端里的就只是文件名,一个字符串而已,然而我对一个字符串疯狂使用filename和save方法,编译器又一直告诉我没有这方法,我***,最后想起认真看看报错提示,终于明白了,上网百度一下知道添加上这个方法就好了。

Flask搭建弹幕视频网站(1)的更多相关文章

  1. Python Flask搭建一个视频网站实战视频教程

    点击了解更多Python课程>>> Python Flask搭建一个视频网站实战视频教程 第1章 课程介绍 第2章 预备开发环境 第3章 项目分析.建立目录及模型规划 第4章 建立前 ...

  2. Flask 构建微电影视频网站(一)

    Flask构建电影视频网站 Python MTV模型 Flask微内核 Flask扩展插件配置及使用方法 根据业务开发网站前后台功能 Flask结合MySQL数据库 你将可以独立开发网站 独立部署运维 ...

  3. Python flask 构建微电影视频网站☝☝☝

    Python flask 构建微电影视频网站☝☝☝ 1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridD ...

  4. Python flask 构建微电影视频网站✍✍✍

    Python flask 构建微电影视频网站  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  5. Python Flask打造一个视频网站实战视频教程

    下载链接:https://www.yinxiangit.com/607.html 目录: 本套课程从零基础讲解flask开发网站.涉及到的知识点包括:Python和pycharm的安装.urls和视图 ...

  6. Flask 构建微电影视频网站(八)

    评论收藏及弹幕 实现电影评论添加及列表.数据查询实现统计播放量和评论量.jquery ajax实现收藏电影,flask结合redis消息队列实现电影弹幕,bug处理等功能. 电影评论-统计 class ...

  7. Flask 构建微电影视频网站(二)

    搭建前台页面 前台布局搭建 将static中的文件拷贝到项目的static目录下 在app/templates/home下新建home.html,当作基础模板,并修改静态资源链接 <!docty ...

  8. Python Flask 构建微电影视频网站

    前言 学完本教程,你将掌握: 1.学会使用整形.浮点型.路径型.字符串型正则表达式路由转化器 2.学会使用post与get请求.上传文件.cookie获取与相应.404处理 3.学会适应模板自动转义. ...

  9. Flask 构建微电影视频网站(四)

    后台管理 实现后台管理系统使用flask sqlalchemy结合mysql数据库进行增删改查操作.分页的使用.路由装饰器定义.模板中变量调用.登录会话机制.上传文件.flask wtforms表单使 ...

随机推荐

  1. AT2390-[AGC016F]Games on DAG【状压dp,SG函数】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2390 解题思路 \(n\)个点的\(DAG\),\(m\)条边可有可无,\(1\)和\(2\)上有石头.求有多 ...

  2. mybatis-plus最新版代码生成器(Swagger3)

    写项目想用mybatis-plus+swagger3,百度最新版代码生成器都是旧版的,且官网的配置过于简洁,所以手敲一份,在官网的基础上加了一堆配置,lombok,restful,mvc三层结构目录等 ...

  3. Go语言核心36讲(Go语言基础知识三)--学习笔记

    03 | 库源码文件 在我的定义中,库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话). 这里的"其他代码" ...

  4. redis学习笔记-02 list列表类型命令

    一.lpush key value1 value2 value3 value4(命令将一个或多个值插入到列表头部. 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作) lpush k1 ...

  5. bzoj4712 洪水(动态dp)

    看起来很模板的一个题啊 qwq 但是我还是wei 题目要求的是一个把根节点和所有叶子断开连接的最小花费. 还是想一个比较\(naive\)的做法 我们令\(dp1[i]\)表示,在\(i\)的子树内, ...

  6. 流量治理神器-Sentinel的限流模式,选单机还是集群?

    大家好,架构摆渡人.这是我的第5篇原创文章,还请多多支持. 上篇文章给大家推荐了一些限流的框架,如果说硬要我推荐一款,我会推荐Sentinel,Sentinel的限流模式分为两种,分别是单机模式和集群 ...

  7. python中常用的导包的方法和常用的库

    python中常用的导包的方法               导入包和包名的方法:1.import package.module 2.from package.module import  * 例一: ...

  8. RabbitMQ延时队列应用场景

    应用场景 我们系统未付款的订单,超过一定时间后,需要系统自动取消订单并释放占有物品 常用的方案 就是利用Spring schedule定时任务,轮询检查数据库 但是会消耗系统内存,增加了数据库的压力. ...

  9. 【UE4】GAMES101 图形学作业2:光栅化和深度缓存

    总览 在上次作业中,虽然我们在屏幕上画出一个线框三角形,但这看起来并不是那么的有趣.所以这一次我们继续推进一步--在屏幕上画出一个实心三角形,换言之,栅格化一个三角形.上一次作业中,在视口变化之后,我 ...

  10. 记一个非常诡异的关于 shared_ptr 的 bug

    问题描述 今天写项目的时候遇见一个特别诡异的 bug,体现在在执行某条语句时,程序会莫名崩溃,并且给出的错误信息也非常难懂,只有一个malloc(): invalid size (unsorted)错 ...