Django基本内容

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几个实用的编辑器
  1. Group Required
    有时需要保护一些视图,只允许某些用户组访问。这时就可以使用下面的装饰器来检查用户是否属于该用户组。
  2. Anonymous required
    这个装饰器是参考 Django 自带的 login_required 装饰器,但是功能是相反的情况,即用户必须是未登录的,否则用户将被重定向到 settings.py 中定义的地址。当我们想要已登录的用户不允许进入某些视图 (比如登录) 时,非常有用。
  3. Superuser required
    这个装饰器和上面的 group_required 类似, 但是它只允许超级用户才能访问视图
  4. Ajax required
    这个装饰器用于检查请求是否是 AJAX 请求,在使用 jQuery 等 Javascript 框架时,这是一个非常有用的装饰器,也是一种保护应用程序的好方法。
  5. Time it
    如果您需要改进某个视图的响应时间,或者只想知道运行需要多长时间,那么这个装饰器非常有用。
  6. 自定义功能
    下面这个装饰器只是一个示例,测试你能够轻松地检查某些权限或某些判断条件,并 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
更改django/admin的名称指令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值