Django后续
Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方。
用户账户
创建表单、实现用户的使用功能、Django防范常见攻击、用户身份验证系统……总之就是让用户都能正常使用
让用户能够输入数据
添加新的主题和条目、编辑条目
表单,url模式,视图函数views,创建模板并链接到页面。
GET请求与POST请求,POST用于提交表单,GET用于从服务器读取数据。
from django.urls import reverse
需要
创建用户账户
建立一个用户注册和身份验证系统,先创建一个新的应用程序,然后修改模型Topic
应用程序users
python manage.py startapp users
1、将应用程序添加到settings
2、修改根目录urls.py使其包含将为应用程序定义的URL
用户登录、注销与注册
要老命了,百度了一下午,我愿称其为Django新版本(3.x)踩坑记录。
我还是直接把代码上传到GitHub上好了,要改的地方实在太多了。
让用户拥有自己的数据
用户需要专属学习笔记
使用@login_required限制访问
全面限制。装饰器(decorator)是放在函数定义前的指令,修改函数代码的行为。
数据关联用户
- 修改模型Topic
- 确定当前有哪些用户(启动Django shell)
- 迁移数据库
问题:
当执行 python manage.py shell 出现错误:TypeError: init() missing 1 required positional argument: ‘on_delete’
解决方案:
定义外键的时候需要加上 on_delete=;
即:contract = models.ForeignKey(Contract, on_delete=models.CASCADE)
原因如下:
django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:
TypeError: init() missing 1 required positional argument: ‘on_delete’
on_delete各个参数的含义如下:
on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE, # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做
on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL, # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET, # 删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
1234567891011
由于多对多(ManyToManyField)没有 on_delete 参数,所以以上只针对外键(ForeignKey)和一对一(OneToOneField)
完善用户功能
只允许用户访问自己的主题,保护用户的主题和页面,将主题关联到当前用户。
# 确认请求的主题属于当前用户
if topic.owner != request.user:
raise Http404
问题
由于某些原因(主要是“网络原因”和Windows系统的差别),后续Heroku注册和服务器部署继续太过麻烦,于是我决定换个思路,等搞清楚云服务器怎么用再试着部署到自己的服务器上,也许之后可以去备个案然后解析域名,这样就能真正上线使用了(有没有用户另说)
而且由于我的目的是正常使用应用程序,使用Bootstrap库设置应用程序的样式来进行美化,在目前阶段卡那里也就缺少必要了,可以在解决部署之后再完善。
小结
至此,我们的“学习笔记”项目就暂告一段落了,虽然我也还不想就这样结项,但是有必要进行这段时间以来的学习总结了。
首先,整个项目都是基于python开发的,并且主要是用到了Django框架——一套用于开发交互式网站的工具(还有很多类似)
虽然不是第一次接触到前端开发,但确实是第一次一个人上手开发一整个Web应用程序,借此我也大概了解了Web的整个开发流程,并且接触到了数据库和服务器的使用。
包括第一次接触正则表达式,创建表单(提交数据)以及模型定义(继承类)。
用Django创建网页三步走:定义URL,编写视图和模板。
然后让数据关联用户,功能齐备后,美化以及部署还有待完成。
最最重要的,还是在本次项目开发过程中所学到和实践使用的东西。
比如再次深入体会到使用git进行版本控制能够带来的方便,而且通过项目实践也接触到了很多之前不明白也不知道的新东西。
比如vim编辑器(举例而言,还有很多),虽然目前可能还不会使用,但就好像埋下了一颗种子,将来总有一天会生根发芽。
再就是实践过程中学到的一些习惯和方法。
根据自己的兴趣开发有意义的项目。
只要有机会,就向别人发出邀请,根据反馈改进程序。
遇到棘手问题时,想办法寻求帮助。首先认清形势(想要做什么?已尝试那些方式?结果如何?)橡皮鸭子调试法。
再试试,歇一会。
正确使用在线搜索解决问题,直接搜索报错消息,看别人的博客里的解决方案。
Stack Overflow 和官方文档文库,reddit和IRC(还没用过)
用什么学什么的精神。
peace!