djangorestframework-simplejwt认证的使用
1. 安装 :pip install djangorestframework-simplejwt ,注册路由
INSTALLED_APPS = [
'rest_framework_simplejwt',
]
3. settings.py 配置
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',)
}
3.urls.py 路由的编写:
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
4.
官方文档:
https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html
ORM外键设计原理
、表断关联 db_constraint=False
# 1、表之间没有外键关联,但是有外键逻辑关联(有充当外键的字段)
# 2、断关联后不会影响数据库查询效率,但是会极大提高数据库增删改效率(不影响增删改查操作)
# 3、断关联一定要通过逻辑保证表之间数据的安全
# 4、断关联
# 5、级联关系
# 作者没了,详情也没:on_delete=models.CASCADE
# 出版社没了,书还是那个出版社出版:on_delete=models.DO_NOTHING
# 部门没了,员工没有部门(空不能):null=True, on_delete=models.SET_NULL
# 部门没了,员工进入默认部门(默认值):default=0, on_delete=models.SET_DEFAULT
、ORM外键设计
# 1、一对多:外键放在多的一方
# 2、多对多:外键放在常用的一方
# 3、一对一:外键放在不常用的一方
# 4、外键字段为正向查询字段,related_name是反向查询字段
ForeignKey和ManyToManyField的外键关联可以添加db_constraint=False关闭级联。
class Book(BaseModel):
name = models.CharField(max_length=16)
price = models.DecimalField(max_digits=5, decimal_places=2)
# to=‘Publish’ 使用表引用的方式来进行关联,可以省略导入的一步。
publish = models.ForeignKey(to='Publish', related_name='books', db_constraint=False, on_delete=models.DO_NOTHING)
# 重点:多对多外键实际在关系表中,ORM默认关系表中两个外键都是级联
# 想断关联还想连表查询做这个是不够的,还需要null=True, blank=True,on_delete=models.SET_NUL
# ManyToManyField字段不提供设置on_delete,如果想设置关系表级联,只能手动定义关系表
authors = models.ManyToManyField(to='Author', related_name='books', null=True, blank=True,on_delete=models.SET_NUL,db_constraint=False)
# 自定义连表深度,不需要反序列化,因为自定义插拔属性不参与反序列化
@property
def publish_name(self):
return self.publish.name
@property
def author_list(self):
temp_author_list = []
for author in self.authors.all():
temp_author_list.append({
'name': author.name,
'sex': author.get_sex_display(),
'mobile': author.detail.mobile
})
return temp_author_list
参考链接:
https://www.cnblogs.com/guapitomjoy/p/12090801.html
BaseModel基表的创建
可创建一个common文件及,编辑BaseModel.py文件
class BaseModel(models.Model):
create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True,verbose_name='创建时间')
is_delete = models.BooleanField(default=False,verbose_name='是否删除')
class Meta:
# 基表,设置abstract=True进行标记,就不会在数据库中建表
abstract = True
djnago几个实用的编辑器
- Group Required
有时需要保护一些视图,只允许某些用户组访问。这时就可以使用下面的装饰器来检查用户是否属于该用户组。 - Anonymous required
这个装饰器是参考 Django 自带的 login_required 装饰器,但是功能是相反的情况,即用户必须是未登录的,否则用户将被重定向到 settings.py 中定义的地址。当我们想要已登录的用户不允许进入某些视图 (比如登录) 时,非常有用。 - Superuser required
这个装饰器和上面的 group_required 类似, 但是它只允许超级用户才能访问视图 - Ajax required
这个装饰器用于检查请求是否是 AJAX 请求,在使用 jQuery 等 Javascript 框架时,这是一个非常有用的装饰器,也是一种保护应用程序的好方法。 - Time it
如果您需要改进某个视图的响应时间,或者只想知道运行需要多长时间,那么这个装饰器非常有用。 - 自定义功能
下面这个装饰器只是一个示例,测试你能够轻松地检查某些权限或某些判断条件,并 100% 自己定制。 想象你有一个博客、购物论坛,如果用户需要有很多积分才能发表评论,这是一个避免垃圾信息的好方法。下面创建一个装饰器来检查用户是否已登录并拥有超过 10 个积分,这样才可以发表评论,否则将抛出一个 Forbidden
ForeignKey的使用
class ArticleColumn(models.Model):
# 用户与栏目是“一对多”关系,所以用ForeignKey,一个用户可以设置多个栏目,此处的user字段对应实际表中的user_id,来自于User表中主键
user = models.ForeignKey(User, related_name='article_column')
column = models.CharField(max_length=100)
class ArticlePost(models.Model):
author = models.ForeignKey(User, related_name='article')
slug = models.SlugField(max_length=500)
column = models.ForeignKey(ArticleColumn, related_name='article_column')
body = models.TextField()
created = models.DateTimeField(default=timezone.now())
updated = models.DateTimeField(auto_now_add=True)
# media/%Y%m%d/为图片的真实放置路径,因为settings中已经配置了MEDIA_ROOT为media文件夹,blank=True允许表单的该字段对应值为空,意思是非必填字段
avatar = models.ImageField(upload_to='%Y%m%d/', blank=True)
# 已知从表(ArticlePost)取主表(ArticleColumn)数据
ArticlePost.objects.get(author(字段名)='gouzi'(值)).column(外键字段).user(字段名)
# 已知主表(ArticleColumn)取从表(ArticlePost)
# 从表内无releate_name
ArticleColumn.objects.get(user='gouzi').all().articlePost_set(小写从表名_set).all()
参考链接:
https://blog.csdn.net/hpu_yly_bj/article/details/78939748
https://blog.csdn.net/weixin_30585437/article/details/98959399
查看本机电脑上安装的django版本
python -m django --version
创建django项目
# 先cd到要创建的文件夹中
django-admin startproject mysite
# 运行项目
python manage.py runserver
# 更换项目端口
python manage.py runserver 0.0.0.0:8000
# 创建名为polls的应用目录
python manage.py startapp polls
# 数据库的迁移指令
python manage.py migrate
# 链接mysql的配置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# },
'default':{
'ENGINE': 'django.db.backends.mysql',
'NAME':'test', # 数据库名称
'USER': 'root', # 用户名
'PASSWORD': '123456',
'HOST': '127.0.0.1', # ip地址
'PORT': '3306'
},
}
# 修改问model.py文件后,增添的字段通过下面指令添加
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls.apps.PollsConfig'
]
数据迁移步骤
编辑 models.py 文件,改变模型。
运行 python manage.py makemigrations 为模型的改变生成迁移文件。
运行 python manage.py migrate 来应用数据库迁移。
# 为项目创建超级管理员
python manage.py createsuperuser