Flask搭建弹幕视频网站(1)

说在前面

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

补一下

网站已经做出来了(我的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方法,编译器又一直告诉我没有这方法,我***,最后想起认真看看报错提示,终于明白了,上网百度一下知道添加上这个方法就好了。

猜你喜欢

转载自www.cnblogs.com/JoshuaYu/p/12253630.html