Django后续

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)是放在函数定义前的指令,修改函数代码的行为。

数据关联用户

  1. 修改模型Topic
  2. 确定当前有哪些用户(启动Django shell)
  3. 迁移数据库
问题:

当执行 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!


   转载规则


《Django后续》 Henry-Avery 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录