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. Python入门 序列章

    内置函数range range([start,] stop[, step]) 第一个参数表示步长(默认为0),第二个参数表示终止值(结果中不包括这个值),第三个参数表示步长(默认为1, 实验发现不能用 ...

  2. QT编程环境

    (1)QT的工具 ① assistant 帮助手册 ② qmake -v 查看qt版本 ③ qmake -project 可以把项目的源文件组织成项目的描述文件 .pro ④ qmake 可以根据.p ...

  3. 微信端修改title

    function setTitle(t) { document.title = t; var i = document.createElement('iframe'); i.src = "i ...

  4. javascript的this关键字

    this永远指向函数运行时所在的对象!而不是函数被创建时所在的对象.也即:谁调用,指向谁.切记… 1.普通函数中的this 无论this身处何处,第一要务就是要找到函数运行时的位置. var name ...

  5. 脚本可执行,但无HTML测试报告文件生成,其造成的原因是在PyCharm的执行模式错误

    定义测试报告两种写法: 1)测试报告直接在本地绝对路径下生成 # 导入HTMLTestRunner模块 import HTMLTestRunner # 通过open()方法以二进制写模式('wb')打 ...

  6. React文档(十二)组合vs继承

    React拥有很强大的组合模型,我们建议使用组合来替代继承来重利用组件之间的代码. 在本章节中,我们将讨论一些开发者经常触及继承的问题,并且我们该如何使用组合来解决这些问题. 组合 一些组件事先不知道 ...

  7. 模糊测试(fuzzing)是什么

    一.说明 大学时两个涉及“模糊”的概念自己感觉很模糊.一个是学数据库出现的“模糊查询”,后来逐渐明白是指sql的like语句:另一个是学专业课时出现的“模糊测试”. 概念是懂的,不外乎是“模糊测试是一 ...

  8. 纯CSS实现Div高度根据自适应宽度(百分百调整)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. CCF关于NOIP复赛网络申诉问题的公告

    CCF NOI竞赛委员会将NOIP复赛网络申诉的有关情况公告如下.凡属于以下情况的申诉,均不予受理 1.非公示期限内提出的申诉,不予受理: 2.与个人名次.他人成绩和他人名次有关的申诉,不予受理: 3 ...

  10. 指导手册01:安装Hadoop

    指导手册01:安装Hadoop  Part 1:安装及配置虚拟机 1.安装Linux. (1)打开VMvirtualBox (2) 控制->新建虚拟机,输入虚拟机名称“marst+学号” 类型: ...