zoukankan      html  css  js  c++  java
  • django admin后台的简单使用

    创建自己的model.py文件

    from django.db import models
    
    from django.contrib.auth.models import (
        BaseUserManager, AbstractBaseUser, AbstractUser
    )
    
    
    # class MyUserManager(BaseUserManager):
    #     def create_user(self, email, name, password=None):
    #         """
    #         Creates and saves a User with the given email, date of
    #         birth and password.
    #         """
    #         if not email:
    #             raise ValueError('Users must have an email address')
    #
    #         user = self.model(
    #             email=self.normalize_email(email),
    #             name=name,
    #         )
    #
    #         user.set_password(password)
    #         user.save(using=self._db)
    #         return user
    #
    #     def create_superuser(self, email, name, password):
    #         """
    #         Creates and saves a superuser with the given email, date of
    #         birth and password.
    #         """
    #         user = self.create_user(
    #             email,
    #             password=password,
    #             name=name,
    #         )
    #         user.is_admin = True
    #         user.save(using=self._db)
    #         return user
    #
    #
    # class MyUser(AbstractBaseUser):
    #     email = models.EmailField(
    #         verbose_name='email address',
    #         max_length=255,
    #         unique=True,
    #     )
    #     # date_of_birth = models.DateField()
    #     name = models.CharField(max_length=32)
    #     is_active = models.BooleanField(default=True)
    #     is_admin = models.BooleanField(default=False)
    #
    #     objects = MyUserManager()
    #
    #     USERNAME_FIELD = 'email'
    #     REQUIRED_FIELDS = ['name']
    #
    #     def __str__(self):
    #         return self.email
    #
    #     def has_perm(self, perm, obj=None):
    #         "Does the user have a specific permission?"
    #         # Simplest possible answer: Yes, always
    #         return True
    #
    #     def has_module_perms(self, app_label):
    #         "Does the user have permissions to view the app `app_label`?"
    #         # Simplest possible answer: Yes, always
    #         return True
    #
    #     @property
    #     def is_staff(self):
    #         "Is the user a member of staff?"
    #         # Simplest possible answer: All admins are staff
    #         return self.is_admin
    
    # class UserInfo(AbstractBaseUser):
    #
    #     avatar = models.ImageField(upload_to="img")
    #
    # class Blog(models.Model):
    #     info = models.CharField()
    #
    # class Artical(models.Model):
    #     title = models.CharField(max_length=128)
    #     publish_date = models.DateTimeField()
    #     author = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
    #     content = models.OneToOneField(Blog, on_delete=models.CASCADE)
    #
    # class Commments(models.Model):
    #     user = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
    #     c_time = models.DateTimeField()
    #     comments = models.CharField()
    #     artical = models.ForeignKey(Artical, on_delete=models.CASCADE)
    #     reply = models.ForeignKey("Commments", on_delete=models.CASCADE)
    #
    # class Tag(models.Model):
    #     tag_name = models.CharField()
    #     artical = models.ManyToManyField(Artical)
    #
    # class Category(models.Model):
    #     name = models.CharField(max_length=64)
    #     artical = models.ManyToManyField(Artical)
    #
    # class Praise(models.Model):
    #     tag = models.IntegerField()
    #     artical = models.ForeignKey(Artical, on_delete=models.CASCADE)
    #     user = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
    
    class UserInfo(AbstractUser):
        """
        用户信息表
        """
        nid = models.AutoField(primary_key=True)
        phone = models.CharField(max_length=11, null=True, unique=True)
        avatar = models.FileField(upload_to="avatars/", default="avatars/default.png", verbose_name="头像")
        create_time = models.DateTimeField(auto_now_add=True)
    
        blog = models.OneToOneField(to="Blog", to_field="nid", null=True, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.username
    
        # class Meta:
        #     verbose_name="用户"
        #     verbose_name_plural=verbose_name
    
    
    class Blog(models.Model):
        """
        博客信息
        """
        nid = models.AutoField(primary_key=True)
        title = models.CharField(max_length=64)  # 个人博客标题
        site = models.CharField(max_length=32, unique=True)  # 个人博客后缀
        theme = models.CharField(max_length=32)  # 博客主题
    
        def __str__(self):
            return self.title
    
        class Meta:
            verbose_name="博客信息"
            verbose_name_plural=verbose_name
    
    
    class Category(models.Model):
        """
        个人博客文章分类
        """
        nid = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)  # 分类标题
        blog = models.ForeignKey(to="Blog", to_field="nid", on_delete=models.CASCADE)  # 外键关联博客,一个博客站点可以有多个分类
    
        def __str__(self):
            return self.title
    
        class Meta:
            verbose_name="分类"
            verbose_name_plural=verbose_name
    
    class Tag(models.Model):
        """
        标签
        """
        nid = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)  # 标签名
        blog = models.ForeignKey(to="Blog", to_field="nid", on_delete=models.CASCADE)  # 所属博客
    
        def __str__(self):
            return self.title
    
        class Meta:
            verbose_name="标签"
            verbose_name_plural=verbose_name
    
    class Article(models.Model):
        """
        文章
        """
        nid = models.AutoField(primary_key=True)
        title = models.CharField(max_length=50)  # 文章标题
        desc = models.CharField(max_length=255)  # 文章描述
        create_time = models.DateTimeField()  # 创建时间
    
        category = models.ForeignKey(to="Category", to_field="nid", null=True, on_delete=models.CASCADE)
        user = models.ForeignKey(to="UserInfo", to_field="nid", on_delete=models.CASCADE)
        tags = models.ManyToManyField(  # 中介模型
            to="Tag",
            through="Article2Tag",
            through_fields=("article", "tag"),  # 注意顺序!!!
        )
    
        comment_count = models.IntegerField(verbose_name="评论数", default=0)
        updown = models.IntegerField(verbose_name="点赞数", default=0)
    
        def __str__(self):
            return self.title
    
        class Meta:
            verbose_name="文章"
            verbose_name_plural=verbose_name
    
    
    class ArticleDetail(models.Model):
        """
        文章详情表
        """
        nid = models.AutoField(primary_key=True)
        content = models.TextField()
        article = models.OneToOneField(to="Article", to_field="nid", on_delete=models.CASCADE)
    
        class Meta:
            verbose_name="文章内容"
            verbose_name_plural=verbose_name
    
    
    class Article2Tag(models.Model):
        """
        文章和标签的多对多关系表
        """
        nid = models.AutoField(primary_key=True)
        article = models.ForeignKey(to="Article", to_field="nid", on_delete=models.CASCADE)
        tag = models.ForeignKey(to="Tag", to_field="nid", on_delete=models.CASCADE)
    
        class Meta:
            unique_together = (("article", "tag"),)
            verbose_name="文章对标签"
            verbose_name_plural=verbose_name
    
    
    class ArticleUpDown(models.Model):
        """
        点赞表
        """
        nid = models.AutoField(primary_key=True)
        user = models.ForeignKey(to="UserInfo", null=True, on_delete=models.CASCADE)
        article = models.ForeignKey(to="Article", null=True, on_delete=models.CASCADE)
        is_up = models.BooleanField(default=True)
    
        class Meta:
            unique_together = (("article", "user"),)
            verbose_name="点赞"
            verbose_name_plural=verbose_name
    
    
    class Comment(models.Model):
        """
        评论表
        """
        nid = models.AutoField(primary_key=True)
        article = models.ForeignKey(to="Article", to_field="nid", on_delete=models.CASCADE)
        user = models.ForeignKey(to="UserInfo", to_field="nid", on_delete=models.CASCADE)
        content = models.CharField(max_length=255)  # 评论内容
        create_time = models.DateTimeField(auto_now_add=True)
        parent_comment = models.ForeignKey("self", null=True, blank=True, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.content
    
        class Meta:
            verbose_name="评论"
            verbose_name_plural=verbose_name
    models.py

    注册自己的models.py到admin后台

    from django.contrib import admin
    from jax import models
    
    # Register your models here.
    
    
    admin.site.register(models.UserInfo)
    admin.site.register(models.Blog)
    admin.site.register(models.Category)
    admin.site.register(models.Tag)
    admin.site.register(models.Article)
    admin.site.register(models.Article2Tag)
    admin.site.register(models.ArticleDetail)
    admin.site.register(models.ArticleUpDown)
    admin.site.register(models.Comment)

    扩展django默认的用户表

    # settings.py文件还可以更改语言类型

    LANGUAGE_CODE = 'zh-hans'
    settings.py
    
    AUTH_USER_MODEL = 'jax.UserInfo'
  • 相关阅读:
    Educational Codeforces Round 81 (Rated for Div. 2) A-E
    SEERC 2018 I
    manjaro linux java环境配置
    Pangu and Stones HihoCoder
    Linux下 vim 的配置
    C++内存管理技术
    Interview_C++_day27
    Interview_C++_day26
    Interview_C++_day25
    Interview_数据库_day24
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/10593969.html
Copyright © 2011-2022 走看看