admin是django自带的后台管理,在初始的时候就默认配置好了

当输入ip地址的时候后面跟admin,就会登陆管理员的后台,这个是django自带的,可以快速管理数据表(增删改查)

PS:ip地址后/admin就可以登陆,登录前要先创建一个超级用户的账号

菜单的tools - run manage.py task...

输入createsuperuser

根据提示创建,密码必须是8位不能纯数字   root/root123456

在admin.py文件夹内

from django.contrib import admin
from bbs01 import models #想要在后台看到那张表,就要把表填在括号里,这样就能在后台看到表
admin.site.register(models.UserInfo)

PS:OneToOneField和ForeignKey的区别,就是OneToOneField自带了'unique' = True,而ForeignKey需要手动指定

建表关系的讲解

from django.db import models
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):
'''创建用户信息表'''
id = models.AutoField(primary_key=True)
# blank = True 就是admin中表单提交的时候做校验,如果设置成True,就是不校验了,其实就是在后台界面创建用户的账户的时候,只要字段有了blank=True,就可以为空创建,verbose_name就是让表的字段以中文在admin后台显示
phone = models.CharField(max_length=32, null=True, blank=True,verbose_name='手机号')
# avatar 就是用户的头像,这个地方只是存一个路径,实际的文件是存在某一个位置,这样表文件不会很大,查询效率也会高
'''upload_to就是指定文件存储的位置,default就是默认值,如果没有传文件默认就是调用设置的文件'''
avatar = models.FileField(upload_to='avatar/', default='avatar/default.png') #这样写FileField上传的文件会自动保存到某个位置,然后把路径放到该字段中
blog = models.OneToOneField(to='Blog', to_field='nid', null=True,blank=True) class Meta:
verbose_name = '用户表' #这个让后台显示我们自定的表名
verbose_name_plural = verbose_name #因为是外国人设计的,如果不写这个会在名字后面跟一个s class Blog(models.Model):
'''个人站点表'''
nid = models.AutoField(primary_key=True)
# title就是地址后面跟的名字,地址后家名字就是跳转到这个名字的页面下
title = models.CharField(max_length=64)
site_name = models.CharField(max_length=32)
# theme就是主题样式
theme = models.CharField(max_length=64) '''print的时候显示'''
def __str__(self):
return self.site_name class Category(models.Model):
'''文章分类表'''
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=64)
#unique =True,唯一的约束性,给哪个添加就表示哪个字段只能等于一个值,通常可以用在账号名、手机号等
blog = models.ForeignKey(to='Blog', to_field='nid', null=True) def __str__(self):
return self.title class Tag(models.Model):
'''标签表'''
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=64)
blog = models.ForeignKey(to='Blog', to_field='nid', null=True) def __str__(self):
return self.title class Article(models.Model):
'''文章表'''
nid = models.AutoField(primary_key=True)
'''文章标题'''
title = models.CharField(max_length=64, verbose_name='文章标题')
# 文章简介
desc = models.CharField(max_length=255)
# 文章内容,用TextField,可以存储大文本,就是一个文本类型
content = models.TextField()
# 文章的创建时间,auto_now当这条数据修改的时候更新成当前时间,auto_now_add当新增数据的时候更新当前时间,这两个属性只有DateTimeField和DateField才有
create_time = models.DateTimeField(auto_now_add=True)
# 文章和个人站点是一对多,一个站点下有多篇文章,所以关联字段写在多的一方
blog = models.ForeignKey(to='Blog', to_field='nid', null=True)
# 文章和分类,一个分类下有多篇文章,多以关联字段也是写在多的一方
category = models.ForeignKey(to='Category', to_field='nid', null=True)
# 文章和标签是多对多的关系,这篇文章属于哪个标签,这个需要手动创建第三章表, through就是通过那个表建立关系,through_fields通过那两个字段建立管理
tag = models.ManyToManyField(to='Tag', through='ArticleTOTag', through_fields=('article', 'tag'))
'''tag = models.ManyToManyField(to='tag) 这个是自动创建第三章表,如果我们需要自定义第三章表,则使用手动创建''' class ArticleTOTag(models.Model):
'''这是手动创建的第三张表,表明多表的关联'''
nid = models.AutoField(primary_key=True)
# 文章的ID
article = models.ForeignKey(to='Article', to_field='nid')
#标签的id
tag = models.ForeignKey(to='Tag', to_field='nid') class Commit(models.Model):
'''用户评论表'''
nid = models.AutoField(primary_key=Tag)
# 谁
user = models.ForeignKey(to='UserInfo', to_field='id')
# 对那篇文章
article = models.ForeignKey(to='Article', to_field='nid')
# 评论的内容
content = models.CharField(max_length=255)
# 创建的时间
create_time = models.DateTimeField(auto_now_add=True)
'''这个是子评论,就是给哪个评论后面再评论,空位null,如果有评论主键评论的主键'''
# 自关联,to自己的id,to_field就是主键,让一个字段可以关联本表的主键,就是自己关联自己
parent = models.ForeignKey(to='self', to_field='nid', null=True, blank=True) class UpAndDown(models.Model):
'''点赞点踩表'''
nid = models.AutoField(primary_key=True)
# 谁
user = models.ForeignKey(to='UserInfo', to_field='id')
# 给哪篇文章
article = models.ForeignKey(to='Article', to_field='nid')
# 点了赞或踩,这个BooleanField存的是布尔类型,在数据库表中是以0和1表示,因为数据库是不能存True和False的
is_up = models.BooleanField() class Meta:
#这个就是联合唯一,就是指定表中user字段只能和article字段关联
unique_together = (('user', 'article'))

(33)关于django中路由自带的admin + 建表关系的讲解的更多相关文章

  1. django中路由配置的正则

    在django中配置路由遇到正则的坑: django2.x版本中使用re_path来进行正则表达式的匹配 用法如下: from Django.urls import re.path(导入re_path ...

  2. django中使用ORM模型修改数据库的表名

    在django中,使用models.py创建好一张表后,如果不指定表的名字,那么表的名字就默认为 model_modelname 例如: class Book(models.Model): id = ...

  3. 64、django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  4. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  5. Python Django orm操作数据库笔记之外键和表关系

    外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的. 外键的使用 使用外键前需要先确保相应外键已存储在数据库中(flask中 ...

  6. Django框架基础知识07-常用查询及表关系的实现

    1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 官方文档:http ...

  7. django中路由系统和视图的对应关系(值的传递)-->主要内容(位置参数、关键字参数、额外参数、include分组[urls的分发]、命名分组、反向解析、APPEND_SLASH)

    路由系统也就是 urls.py文件,视图就是 views.py文件 路由系统里面要注意的事项 urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续. 若要从UR ...

  8. 关于Django中路由层(URL-conf)

    关于路由层 路由层其实就是项目中urls.py那个文件,那里面存放着url和视图函数的对应关系它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来 ...

  9. Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系

    首先,我们配置静态文件,要在setting.py里面加入如下几行代码: settings.py # the settings above # STATIC SETTINGS STATIC_URL = ...

随机推荐

  1. 【2.0】SpringBoot连接MySql 8.0的url设置

    jdbc:mysql://localhost:3306/enterprise?useUnicode=true&amp&useSSL=false&amp&characte ...

  2. Learning-Python【18】:Python常用模块(1)—— time、datetime、randrom

    time 模块:与时间相关的功能的模块 在 Python 中,时间分为三种: 1.时间戳:是一个时间的表示,根据不同的语言,可以是整数或浮点数,是从1970年1月1日0时0分0秒到现在经历的秒数 2. ...

  3. Java中的CAS实现原理

    一.什么是CAS? 在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令. 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新 ...

  4. Pandas 基础(6) - 用 replace() 函数处理不合理数据

    首先, 还是新建一个 jupyter notebook, 然后引入 csv 文件(此文件我已上传到博客园): import pandas as pd import numpy as np df = p ...

  5. beyond compare 免费版

    链接:https://pan.baidu.com/s/10lPUEpFPZU76HRbJfbZ2ZA 提取码:r2go

  6. (18)ProcessPoolExecutor进程池

    # 新版本的进程池 ProcessPoolExecutor # 实例化进程池 ProcessPoolExcutor(cpu_count) # 异步提交任务 submit / map # 阻塞直到任务完 ...

  7. ThinkPHP5.0完全开发手册 --技术文档

    1.ThinkPHP5.0完全开发手册.chm 链接:https://pan.baidu.com/s/1199wK6q6O9IyOf5RU_-Xow 提取码:hnek 2.ThinkPHP5.0完全开 ...

  8. EBS 请求输出Html报表集成Echarts

    百度开源的ECharts有样式丰富且美观的报表类型可供选用,可以将其集成至EBS请求输出的Html报表中,这其实就是一个生成Html数据的过程. 定义输出类型为HTML的请求我就不在此处赘述.   我 ...

  9. linux timing profile

    double getUnixTime(void) { struct timespec tv; ) ; return (((double) tv.tv_sec) + (double) (tv.tv_ns ...

  10. Ubuntu安装vsftpd并通过xftp连接

    1.在ubuntu中安装xftp: sudo apt-get update sudo apt-get install vsftpd sudo service vsftpd restart 2.防火墙添 ...