00-django | 01-构建博客目录

python Django

创建blog

进入到 manage.py 文件所在的目录(即项目根目录)下,运行 pipenv run python manage.py startapp blog 可建立一个 firstblog 应用[1]。 创建完毕后可看到目录结构如下[2]

./这个目录为根目录,也是项目的容器。

  • manage.py: 为命令行交互工具[3]
  • blog/:本次的项目名。也就是我创建的这个blog的所有文件存放的父目录
  • settings.py:该 Django 项目的配置文件[4]。 定义了Django的各种参数和路径以及显示语言等信息。
  • urls.py: 该 Django 项目的 URL 声明; 也就是网站"目录"。
  • wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口

tree

这一步只是创建了文件结构,但还没有向Django注册,在setting.py中修改INSTALLED_APPS设置

创建数据库模型

django 会把 Python 代码翻译成对应的数据库操作语言,因此我们可以不用直接写数据库的语法。

模型[5]

每个模型都是一个python类,都继承于 django.db.models.Model。 我们编辑model都在firstblog/models.py中定义即可

from django.db import models
from django.contrib.auth.models import User # Create your models here.
# 定义blog的分类
class Category(models.Model):
name = models.CharField(max_length=100) # 定义文章标签
class Tag(models.Model):
name = models.CharField(max_length=100) # 定义文章,主要有标题、正文、时间等
class Post(models.Model):
title = models.CharField(max_length=70)
body = models.TextField()
created_time = models.DateTimeField()
modified_time = models.DateTimeField()
excerpt = models.CharField(max_length=200, blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag, blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
  • 定义了一个名为Category的类,继承自models.Model类,且该类有个name属性
  • 定义了Tag类,有个name属性
  • 定义了Post类,有很多属性,其中blank=True表示允许空值。同时允许一对一的ForeignKey关联关系,以及多对多的ManyToManyField关联关系

然后在项目根目录下运行pipenv run python manage.py makemigrationspipenv run python manage.py migrate来写入数据库

django 通过检测应用中 migrations 目录下的文件,得知我们对数据库做了哪些操作,然后它把这些操作翻译成数据库操作语言,从而把这些操作作用于真正的数据库。

若要查看具体数据库命令可以pipenv run python manage.py sqlmigrate firstblog 0001来查看

setting.py显示数据库用的是sqlite3。数据库主要功能就是增删查改

操作数据库

pipenv run python manage.py shell打开交互shell

>>> >>> from firstblog.models import Category, Tag, Post
>>> c = Category(name='category Test') # 实例化
>>> print(c)
Category object (None)
>>> c.save() # 存入数据库
>>> t = Tag(name='tag test') #实例化
>>> t.save() #存入数据库

pipenv run python manage.py createsuperuser用于创建超级用户

Tag.objects.all()Tag.objects.get()

其中all会取出所有符合的,而get只会取1条

  1. get()
  2. 然后重新赋值
  3. 最后save()即可

  1. get()
  2. delete()即可

  1. https://docs.djangoproject.com/zh-hans/2.2/intro/tutorial01/

  2. https://www.runoob.com/django/django-first-app.html

  3. https://docs.djangoproject.com/zh-hans/2.1/ref/django-admin/

  4. https://docs.djangoproject.com/zh-hans/2.1/topics/settings/

  5. https://docs.djangoproject.com/zh-hans/2.2/topics/db/models/

最新文章

  1. javascript 变量,作用域,内存管理小结
  2. MJExtension框架介绍
  3. DIOCP之数据接收事件
  4. Atitit selenium3 新特性
  5. Atitit. C# java 的api 目录封装结构映射总结
  6. 关于ASP.NET的web.config的小笔记
  7. Mingyang.net:No identifier specified for entity
  8. 哈希表(Hash)的应用
  9. Android开发之设定Dialog的位置
  10. 随着visual studio 2013 发布.带来的一些变化
  11. SherlockActivity也可以用依赖注入的方法:
  12. OpenCV——视频颜色识别
  13. Zeppelin0.5.6使用hive解释器
  14. CentOSx64 安装 Gearmand 和 Gearman php扩展
  15. firemonkey EDit 改变颜色
  16. Linux中MySQL忽略表中字段大小写
  17. 如何在mysql客户端即mysql提示符下执行操作系统命令
  18. Python内建GUI模块Tkinter(一)
  19. ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法
  20. 【Java】 剑指offer(47) 礼物的最大价值

热门文章

  1. JDBC详细说明+使用
  2. logback 发送邮件和自定义发送邮件;java类发送邮件
  3. 技术派-常用的一些VS相关的宏名
  4. python+selenium爬取百度文库不能下载的word文档
  5. sougn开源,自己写的一个项目
  6. QT笔记:数据库总结
  7. FPGA基础知识关键点摘要
  8. python 存储数据
  9. Codeforces 1156E Special Segments of Permutation(启发式合并)
  10. DataGuard---->主库和备库都配置 db_file_name_convert和log_file_name_convert的作用