Django中的超级用户和自己创建app原来这么简单!

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这是我参与11月更文挑战的第6天。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"系列文章第一篇:","attrs":{}},{"type":"link","attrs":{"href":"https://xie.infoq.cn/article/5ea83f69f83ae05f2c4d77400","title":"","type":null},"content":[{"type":"text","text":"https://xie.infoq.cn/article/5ea83f69f83ae05f2c4d77400","attrs":{}}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"创建一个admin账户","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先在vscode中我们启动调试项目,然后打开终端,进入到对应项目目录下,执行命令","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"pipenv shell","attrs":{}}],"attrs":{}},{"type":"text","text":"即可进入虚拟环境,然后再执行下面命令创建一个admin账户,","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"python manage.py createsuperuser\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b8/b88936e0816253414277bad95b613e8b.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"创建成功后,我们可以浏览器访问下方网址,(确保vscode中已经启动项目了)","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"http://127.0.0.1:8000/admin\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"会自动跳转到admin登录界面,","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/7a/7a5936d74a3b49e9ba3f600ce846899f.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"输入我们刚刚创建的账号和密码即可登录django自带的管理后台,","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/81/81e3e21d0463d43f817d5f280e62e0e3.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"默认有两个","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"Groups","attrs":{}}],"attrs":{}},{"type":"text","text":"(默认是空的),","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"Users","attrs":{}}],"attrs":{}},{"type":"text","text":"(里面有我们自己创建的admin账号,我们还可以在这里直接创建其他管理员账号)。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"settings.py基本介绍","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/42/42bcce30b696b892065f584d8e682290.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在vscode(当然你也可以用pycharm或者其他代码开发工具)打开settings.py文件你可以看到里面的源码,通过部分英文注释你基本可以了解一些代码的含义,这里我挑选了一些需要修改的、常用的配置,给大家解释一下,我认为你是完全小白,所以还是介绍一下(当然你也可以跳过)。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"# 也可以前往官网查看相关介绍(推荐)\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/3.2/topics/settings/\n\nFor the full list of settings and their values, see\nhttps://docs.djangoproject.com/en/3.2/ref/settings/\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"# True 表示会在终端输出调试信息,在生产环境中需要设置为False\nDEBUG = True\n\n# 可以设置允许访问的ip地址,默认是 127.0.0.1\nALLOWED_HOSTS = []\n\n# app配置说明,每个新建的app都要在这里安装\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n]\n\n# 模版配置,默认是DjangoTemplates,也可以改成大家熟知的Jinja2\n# 这里我们需要设置一下DIRS,添加一个根目录下的templates文件\n# APP_DIRS设置为True,设置为False后无法正常使用Django admin后台\n# 所有的模板我们都放到根目录下的templates文件,统一管理\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\n# 数据库配置,默认使用sqlite3\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.sqlite3',\n 'NAME': BASE_DIR / 'db.sqlite3',\n }\n}\n\n# 项目语言\nLANGUAGE_CODE = 'en-us'\n# 时间时区\nTIME_ZONE = 'UTC'\n\n# 静态资源文件路径\nSTATIC_URL = '/static/'\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通过上面注释解释,首先我们可以修改一下项目语言和时区,改为中文,时区也改成我们这边的~","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"LANGUAGE_CODE = 'zh-hans'\n\nTIME_ZONE = 'Asia/Shanghai'\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"修改后保存,项目是以调试模式开启的,所以保存后系统会自动更新,无需我们再次启动项目,我们直接刷新前面访问的管理后台页面,就会发现页面内容变成中文了。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b0/b067336758d09fa109f2d0bd5e8d0bf5.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"创建blog app","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先在vscode中我们启动调试项目,然后打开终端,进入到对应项目目录下,执行命令","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"pipenv shell","attrs":{}}],"attrs":{}},{"type":"text","text":"即可进入虚拟环境,然后再执行下面命令创建一个admin账户,","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"python manage.py startapp blog\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"运行后,我们看目录结构,会发现多了一个blog目录,也就是我们刚刚创建的一个app,","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/90/90b5d6c0376906de823172aa19ce7d96.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这里需要说明下myblog是我们创建项目时的目录,可以理解为程序的入口,包含了配置文件、系统路由和web服务网关接口配置。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/51/516c18f3b53f469a9b7f8665ec1cfdea.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"关于新创建的app blog目录下的文件简介(简单介绍):","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"migrations 迁移文件,主要存放从models迁移到数据库的数据库操作语句;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"admin.py 注册模型文件,注册后的模型可以在admin管理后台显示;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"apps.py 可以在里面额外设置程序配置,并应用配置;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"models.py 数据模型文件,数据库设计主要在这里,直接创建类对象即可;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"tests.py 测试文件,主要用于app测试;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"views.py 视图文件,主要写功能实现函数;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"urls.py(需要自己创建) 路由文件,注意声明路由关系。","attrs":{}}]}]}],"attrs":{}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"在settings中注册新创建的app","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"创建好app,首先需要在settings中的","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"INSTALLED_APPS","attrs":{}}],"attrs":{}},{"type":"text","text":"中添加上新创建的app,","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"INSTALLED_APPS = [\n 'django.contrib.admin',\n ...\n 'blog', # 博客app\n]\n","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"创建Article Models","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"进入到","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"blog/models.py","attrs":{}}],"attrs":{}},{"type":"text","text":",我们先创建一个","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"Article","attrs":{}}],"attrs":{}},{"type":"text","text":"模型,文章模型主要包括文章作者、文章标题、文章概要和文章正文这四个属性,其他还应该添加属性有:标题图、文章标签、浏览量等,方便入门学习,其余属性后期再添加:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"python"},"content":[{"type":"text","text":"from django.db import models\nfrom django.contrib.auth.models import User\n\n# Create your models here.\nclass Article(models.Model):\n \"\"\"\n 创建一个基本的文章对象\n 包括:作者、标题、概要、正文\n 后期需要添加:标题图、文章标签、浏览量等\n \"\"\"\n # 文章作者,author 通过 models.ForeignKey 外键与系统自带的 User 模型关联在一起\n # 参数 on_delete 用于指定数据删除的方式,避免两个关联表的数据不一致。\n author = models.ForeignKey(User, on_delete=models.CASCADE)\n # 文章标题\n title = models.CharField(max_length=255, null=False, blank=False)\n # 文章概要\n summary = models.CharField(max_length=255, null=False, blank=False)\n # 文章正文\n content = models.TextField()\n \n # 内部类 class Meta 用于给 model 定义元数据\n class Meta:\n # ordering 指定模型返回的数据的排列顺序\n # '-title' 表明数据列表显示按标题名称降序排列\n ordering = ('-title',)\n # db_table 歉意映射到数据库后的表名\n db_table = 'tb_article'\n # django后台管理系统显示名称\n verbose_name = '文章管理'\n verbose_name_plural = verbose_name\n\n # 函数 __str__ 定义当调用对象的 str() 方法时的返回值内容\n # 它最常见的就是在Django管理后台中做为对象的显示值。因此应该总是为 __str__ 返回一个友好易读的字符串\n def __str__(self):\n # 将文章标题返回,django后台管理系统显示条目名称\n return str(self.author) + '-' + self.title\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"创建好模块后,我们需要将Article模型注册到","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"blog/admin.py","attrs":{}}],"attrs":{}},{"type":"text","text":"中,这样才会在后台管理系统中显示,","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"python"},"content":[{"type":"text","text":"from django.contrib import admin\nfrom blog.models import Article\n\n# Register your models here.\n# 注册模型\nadmin.site.register(Article)\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外我们还需要在终端执行迁移命令,这样系统就会自动根据Article模型中的属性帮我们在数据库中创建对应的表了。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"bash"},"content":[{"type":"text","text":"# 进入虚拟环境后执行以下命令\npython manage.py makemigrations\npython manage.py migrate\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/51/51ec53a723f9fed860ebacd3314b3980.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"完成上述设置后,我们完成了模型的创建和注册,以及迁移映射到数据库,接下来我们可以启动程序后直接浏览器访问","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"http://127.0.0.1:8000/admin","attrs":{}}],"attrs":{}},{"type":"text","text":",如果需要登录,就直接用之前创建的admin账号登录即可,登录之后我们可以看到我们新建的文章管理模块。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/a9/a9cc48090cd668209510fbc9552d846e.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"点击进入文章管理模块,我们可以对文章进行增删查改的操作,默认是空的,下面我已经新增了一篇。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/15/15f1fbb52cd872cffcb5c1490ffeae04.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我们可以点击","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"增加 文章管理","attrs":{}}],"attrs":{}},{"type":"text","text":",就可以新建一篇文章了,我们选择作者(和系统中的user是联系起来的,所以只能直接选择),输入文章标题、文章概要、文章内容,天后点击保存即可,也可以点击保存并增加另一个或者保存并继续编辑。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f6/f6c7345e99dba7e1755849db379556e7.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"保存后,会自动跳转到文章管理页面,显示目前数据库中所有的文章,以列表显示。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/a3/a3cd7c25167da220100d6bf265a46ffc.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"随便点击一篇,就可以进入到对应文章的编辑界面了,可以对内容进行修改或者删除等。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f8/f86858705169ff4bef94cbe836aec91d.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下期见,我是爱猫爱技术的老表,如果觉得本文对你学习有所帮助,欢迎点赞、评论、关注我!","attrs":{}}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章