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 步骤如下 ...
随机推荐
- Android自定义view与activity的传值
昨晚在写团队项目的时候,遇到一个问题,直到今天早上才解决...即在自定义view"转盘"结束转动后获取结果的处理中,我是想吧值传到activity中的一个textview中的,但我 ...
- AssetBundle依赖
[Managing asset dependencies] 一个Asset会依赖其它Asset.可以把一个Asset所依赖的Asset也打包进自己的AssetBundle.可是多个Asset可能依赖同 ...
- 开发 WebAPP 的几个前端框架(不断更新中)
http://mobileangularui.com/ http://ionicframework.com/ http://www.idangero.us/framework7/ (中文文档:http ...
- 32. Longest Valid Parentheses (Stack; DP)
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
- shiro 权限集成 sessionManager 配置 学习记录(三)
1.shiro配置文件增加sessionManager管理 <!-- 6.shiro结合Session会话管理器 start --> <bean id="sessionMa ...
- extends前提
extends之前需要先include
- 根据dateutil计算从前到现在过去多少时间
import datetime from dateutil import relativedelta while 1: birthday = input(">>>" ...
- 【转】C语言中DEFINE简介及多行宏定义
要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定 ...
- SQL序列键
当需要更新表中的数据或像表中插入数据时,在很多情况下需要产生唯一的整数序列键 一:更新列的值为唯一值 原数据如下图: 可以定义一个CTE,返回orerid列的值以及row_number()的计算结果. ...
- C# 订单号的生成
/** * 根据当前系统时间加随机序列来生成订单号 * @return 订单号 */ public static string Generat ...