Skip to content
文章摘要

Django 从头开始(一)

前期环境准备

尽量使用最新版,目前看新版有比旧版更多优化的功能,我们也是新项目,因此python使用python3,django使用最新版。

  1. 安装python3

  2. 安装Django,由于我是Mac,有python2.7 和python3,全局安装比较折腾和苹果权限比较严,不如使用虚拟环境开发,这样也有避免冲突的好处。

    https://docs.python.org/zh-cn/3/tutorial/venv.html

    • 创建虚拟环境:python3 -m venv django-env 即目录中会包含独立的开发环境
    • 激活虚拟环境: source django-env/bin/activate windows的话则是 source django-env/bin/activate.bat
    • 每次开发的时候如果不在虚拟环境,需要激活一下才能允许Django相关命令,比如同步数据库python3 manage.py migrate
  3. 安装Django python3 -m pip install django

  4. 查看版本 python3 -m django --version

  5. 创建项目 django-admin startproject mysite

数据库

自动生成依赖的数据库,默认使用的SQLite. 如果你使用的别的数据库的话,请修改setting里面的数据库相关配置,添加上用户名之类的,然后执行迁移(migrate)命令 python3 manage.py migrate

详情见DATABASES配置: https://docs.djangoproject.com/en/4.2/ref/settings/#databases

认证

Django rest framework本身自带多种认证方式,基本认证方式,会话认证(session),以及token认证;rest_framework.authtoken是基于存储数据库令牌的,可以选择JWT,JWT是不依赖存储的计算token,当然也可以使用第三方OAuth 2.0 授权

JWT(JSON Web Token)和自带的 Token(Token Authentication)是两种不同的身份验证和授权机制,具有不同的特点和使用场景。

  1. JSON Web Token (JWT):

    JWT 是一种开放标准(RFC 7519),用于在网络中传输信息的紧凑、自包含的方式。 JWT 使用 JSON 对象将用户声明(claims)进行编码,可以包含有关用户身份、权限和其他自定义数据的信息。 JWT 是基于令牌的身份验证机制,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。 JWT 的优点包括无状态(stateless)和可扩展性,因为所有必要的信息都包含在令牌本身中,不需要在服务器端存储会话信息。 JWT 通常用于跨域认证和授权,以及构建分布式系统中的单点登录(SSO)解决方案。

  2. 自带的 Token(Token Authentication):

    自带的 Token 是 Django REST Framework(DRF)提供的一种基于 Token 的身份验证机制。 自带的 Token 通过在数据库中存储用户的访问令牌(Token),实现用户身份验证和授权。 自带的 Token 机制相对简单,适用于简单的身份验证需求。 自带的 Token 机制可以与 DRF 的身份验证框架无缝集成,提供了方便的身份验证和授权功能。 选择 JWT 还是自带的 Token 取决于你的具体需求和项目情况:

JWT 适用于需要在客户端和服务器之间进行跨域认证和授权的场景,以及需要在令牌中携带自定义声明信息的情况。 自带的 Token 适用于简单的身份验证需求,无需复杂的令牌生成和验证逻辑。

辅助操作

  1. 在开发环境中修改 Django admin 用户的密码,你可以通过以下步骤进行操作:
    • 打开终端或命令行,进入 Django 项目的根目录。
    • 运行以下命令以进入 Django shell:python manage.py shell
    • 在 Python shell 中,执行以下代码来修改 admin 用户的密码:
      python
      from django.contrib.auth.models import User
      
      # 获取 admin 用户对象
      admin_user = User.objects.get(username='admin')
      
      # 设置新的密码
      admin_user.set_password('new_password')
      
      # 保存用户对象
      admin_user.save()
      # 在上面的代码中,将 `'new_password'` 替换为你想要设置的新密码。
    • 退出shell
  2. 依赖模块,你可以使用 pipreqs 这个第三方工具pip install pipreqs, pipreqs . 这会扫描当前目录以及其子目录中的源代码文件,并生成一个包含项目所需依赖的 requirements.txt 文件

自带管理页面的美化

  1. 稍微前卫点,挺好看,不过需要增加代码,https://github.com/unfoldadmin/django-unfold
  2. 比较简单没有引入新的东西,安装即可用,不过感觉UI设计一般般,https://github.com/newpanjing/simpleui

遇到的问题

  1. 新版本4.x已经废弃from django.conf.urls import url,请使用from django.urls import include, path

  2. 如果考虑使用jwt的话 django-rest-framework-jwt 已经停止维护,推荐更换 https://github.com/jazzband/djangorestframework-simplejwt

额外发散

  1. DRY 原则
  2. django-filter
  3. 日志 https://github.com/Delgan/loguru 请求日志的话在nginx容器层面去记录
  4. 文档 https://github.com/axnsan12/drf-yasg
  5. nginx auth_request ngx_http_auth_jwt_module lua
  6. OCR Tesseract OCR , OpenCV。pip install pytesseract pillow