Django 从头开始(一)
前期环境准备
尽量使用最新版,目前看新版有比旧版更多优化的功能,我们也是新项目,因此python使用python3,django使用最新版。
安装python3
安装Django,由于我是Mac,有python2.7 和python3,全局安装比较折腾和苹果权限比较严,不如使用虚拟环境开发,这样也有避免冲突的好处。
- 创建虚拟环境:
python3 -m venv django-env
即目录中会包含独立的开发环境 - 激活虚拟环境:
source django-env/bin/activate
windows的话则是source django-env/bin/activate.bat
- 每次开发的时候如果不在虚拟环境,需要激活一下才能允许Django相关命令,比如同步数据库
python3 manage.py migrate
- 创建虚拟环境:
安装Django
python3 -m pip install django
查看版本
python3 -m django --version
创建项目
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)是两种不同的身份验证和授权机制,具有不同的特点和使用场景。
JSON Web Token (JWT):
JWT 是一种开放标准(RFC 7519),用于在网络中传输信息的紧凑、自包含的方式。 JWT 使用 JSON 对象将用户声明(claims)进行编码,可以包含有关用户身份、权限和其他自定义数据的信息。 JWT 是基于令牌的身份验证机制,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。 JWT 的优点包括无状态(stateless)和可扩展性,因为所有必要的信息都包含在令牌本身中,不需要在服务器端存储会话信息。 JWT 通常用于跨域认证和授权,以及构建分布式系统中的单点登录(SSO)解决方案。
自带的 Token(Token Authentication):
自带的 Token 是 Django REST Framework(DRF)提供的一种基于 Token 的身份验证机制。 自带的 Token 通过在数据库中存储用户的访问令牌(Token),实现用户身份验证和授权。 自带的 Token 机制相对简单,适用于简单的身份验证需求。 自带的 Token 机制可以与 DRF 的身份验证框架无缝集成,提供了方便的身份验证和授权功能。 选择 JWT 还是自带的 Token 取决于你的具体需求和项目情况:
JWT 适用于需要在客户端和服务器之间进行跨域认证和授权的场景,以及需要在令牌中携带自定义声明信息的情况。 自带的 Token 适用于简单的身份验证需求,无需复杂的令牌生成和验证逻辑。
辅助操作
- 在开发环境中修改 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
- 依赖模块,你可以使用 pipreqs 这个第三方工具
pip install pipreqs
,pipreqs .
这会扫描当前目录以及其子目录中的源代码文件,并生成一个包含项目所需依赖的requirements.txt
文件
自带管理页面的美化
- 稍微前卫点,挺好看,不过需要增加代码,https://github.com/unfoldadmin/django-unfold
- 比较简单没有引入新的东西,安装即可用,不过感觉UI设计一般般,https://github.com/newpanjing/simpleui
遇到的问题
新版本4.x已经废弃
from django.conf.urls import url
,请使用from django.urls import include, path
如果考虑使用jwt的话 django-rest-framework-jwt 已经停止维护,推荐更换 https://github.com/jazzband/djangorestframework-simplejwt
额外发散
- DRY 原则
- django-filter
- 日志 https://github.com/Delgan/loguru 请求日志的话在nginx容器层面去记录
- 文档 https://github.com/axnsan12/drf-yasg
- nginx auth_request ngx_http_auth_jwt_module lua
- OCR Tesseract OCR , OpenCV。pip install pytesseract pillow