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'
django admin后台的简单使用的更多相关文章
- django博客项目6:Django Admin 后台发布文章
在此之前我们完成了 Django 博客首页视图的编写,我们希望首页展示发布的博客文章列表,但是它却抱怨:暂时还没有发布的文章!如它所言,我们确实还没有发布任何文章,本节我们将使用 Django 自带的 ...
- Django Admin后台添加用户时出现报错:1452
如果在使用Django Admin后台添加用户时出现报错: (1452, 'Cannot add or update a child row: a foreign key constraint fai ...
- django admin后台插件:django-suit入门
去年9月底开始用django来做公司内部项目,开始对django有了一些了解,感觉django真的蛮强大的(也有很多人推荐flask,将来有空的话我会试试).今天的话只是介绍一个小东西,django管 ...
- Django admin 后台管理
在App 文件夹下的 admin.py 文件中写入 from django.contrib import admin from app名 import models admin.site.site_h ...
- Django Admin后台管理模块的使用
Admin后台管理模块的使用 Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django ...
- Django - admin后台、auth权限
admin后台 一.创建一个管理员用户 (1).设置时区.语言(可选步骤) 打开settings.py,改成下面那样 LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'As ...
- django admin后台(数据库简单管理后台)
只需要简单的几行胆码就可以生成一个完整的管理后台 这个就是django魅力之一 创建超级用户 python manage.py createsuperuser ---- 之后会提示输入用慕名 ...
- django admin后台提示没有static样式相关的文件
问题现象: 将 DEBUG = TEMPLATE_DEBUG = False 设置为False后,访问admin的管理后台,没有样式了. 解决办法: vim settings.py 确保有下面的这两 ...
- 实现django admin后台到xadmin后台的转变
虽然不做前端,还是喜欢好看的东西~.~ 之前同事估计也是功能实现没空管这个后台,前段时间闲的,稍微改了下外貌,前后对比下: Python3.5+Django1.9.7+Xadmin0.6.1 步骤如下 ...
随机推荐
- Echarts在java中使用
index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- MySQL数据库篇之存储引擎
主要内容: 一.数据引擎 二.MySQL支持的存储引擎 三.使用存储引擎 1️⃣ 什么是存储引擎? MySQL中建立的库----> 文件夹,库中建立的表----->文件. 现实生活中我们用 ...
- SQL select 执行顺序
一.sql语句的执行步骤:1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义.2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限.3)视图转换,将涉及视图的查询语 ...
- linux 安装天气插件
1. 用命令 sudo apt install gnome-shell-extension-weather 安装插件 但是在那之前你安装了 GNOME Shell Extensions 如果没有安装 ...
- alinode 配置 pm2
今天公司要配置阿里的一个node.js性能监控(alinode),这个东西看似配置很简单但是你不知道你配置对没对, 因为他需要1分钟后才能显示出来,而且模块依赖我等了10分钟才出来, 文档的链接htt ...
- 1、SSH框架整合
1.建立项目 2.导入SSHjar包 http://pan.baidu.com/s/1hsELr04 3.引入web.xml文件 <?xml version="1.0" en ...
- python中fork()函数生成子进程分析-乾颐堂
python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之 间的执行是相互独立的,其执行顺序可 ...
- 白盒测试实践-任务进度-Day02
所使用静态代码检查工具 阿里巴巴Java开发代码检测IDE插件 小组成员 华同学.郭同学.覃同学.刘同学.穆同学.沈同学 任务进度 在经过任务分配阶段后,大家都投入到了各自的任务中,以下是大家今天任务 ...
- Perl 学习笔记-输入输出
1.读取标准输入<STDIN>(行输入操作=> 读取一行直到换行符) chomp($line = <STDIN>); # 读取一行并去掉最后的换行符(不会自动去掉) pr ...
- python str, list,tuple, dir
Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hello ...