分类 django 下的文章

django setting
以下无效

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    )
}

正确用法
来自 https://blog.csdn.net/weixin_51098806/article/details/123674186#commentBox

MIDDLEWARE = [
    ...
    "projectname.utils.csrf_middleware.NotUseCsrfTokenMiddlewareMixin"
]

/project/project/utils

from django.utils.deprecation import MiddlewareMixin


class NotUseCsrfTokenMiddlewareMixin(MiddlewareMixin):

    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)

安装pymysql

pip install pymysql

django 配置

import pymysql
pymysql.install_as_MySQLdb()


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'name_of_the_database',
        'HOST': 'localhost',
        'USER': 'root',
        'PASSWORD': 'your_mysql_password',
        'PORT': '3306',  # MySQL 默认端口
        'OPTIONS': {
            'charset': 'utf8mb4',  # 设置字符集为 utf8mb4
           },
        }
}

backend下目录结构

tree backend              
backend
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── signals.py
├── urls.py
└── views.py

__init__.py

default_app_config = 'backend.apps.BackendConfig'

apps.py

from django.apps import AppConfig


class BackendConfig(AppConfig):
    default_auto_field = "django.db.models.BigAutoField"
    name = "backend"

    def ready(self):
        import backend.signals

signals.py

import os

from django.db.models.signals import pre_save, post_save
from backend.models import *
from django.core.cache import cache


@receiver(pre_save, sender=Article)
def article_pre_save(sender, instance, **kwargs):
    if instance.pk:
        cache.delete(f'article_{instance.id}')

model

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, default=None, verbose_name='用户')
    name_show = models.CharField(max_length=50, null=False, blank=False, verbose_name='用户昵称')
    avatar = models.ImageField(upload_to='image/', null=True, blank=True, verbose_name='头像',
                               default='image/avatar.png')
    follow_count = models.IntegerField(verbose_name='粉丝数', default=0)
    like_count = models.IntegerField(verbose_name='点赞数', default=0)
    view_count = models.IntegerField(verbose_name='浏览数', default=0)
    collect_count = models.IntegerField(verbose_name='收藏数', default=0)
    article_count = models.IntegerField(verbose_name='文章数', default=0)
    introduction = models.CharField(max_length=100, null=False, blank=False, verbose_name='用户简介',
                                    default='这个人很懒,什么都没有留下')
    department = models.CharField(max_length=100, null=True, blank=True, verbose_name='部门', default='')
    created_at = models.DateTimeField(verbose_name='创建时间', editable=False, null=False, default=timezone.now)
    updated_at = models.DateTimeField(verbose_name='更新时间', editable=False, null=False, auto_now=True)

  
    def __str__(self):
        return self.name_show

    class Meta:
        verbose_name = "资料"
        verbose_name_plural = verbose_name

admin

from django.contrib import admin
from .models import *
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User


class ProfileAdmin(admin.StackedInline):
    model = Profile

    list_display = (
        'id', 'user', 'avatar', 'avatar_tag', 'follower_count', 'like_count', 'collect_count', 'article_count')


class UserAdmin(UserAdmin):
    list_display = (
        'id', 'username', 'avatar_tag', 'email', 'is_staff', 'is_active', 'is_superuser', 'date_joined', 'last_login')
    inlines = (ProfileAdmin,)

    def avatar_tag(self, obj):
        return obj.profile.avatar_tag()


# admin.site.register(Profile, ProfileAdmin)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)