python3.8安装django_Python3.8+Django3.0搭建个人博客(2)创建APP

在Django中,项目(Project)是一个网站的总的合集,应用(APP)是单个的功能模块。比如淘宝网是一个项目,其中的用户管理、订单管理、商品管理、电商直播等等功能模块是一个个的应用。虽然可以把所有功能写在一个应用里,但是强烈不建议这么做,把项目拆合理地拆分成应用是更加正确的做法。

用Pycharm打开我们之前创建的项目:File-Open,选中my_blog文件夹,单击OK按钮。

打开cmd,进入my_blog目录,然后开启虚拟环境。由于Scripts文件夹在上一层目录中,这里用..表示上一层目录。

C:\Users\glp\blog\env\my_blog>..\Scripts\activate

(env) C:\Users\glp\blog\env\my_blog>

创建名为“article”的APP。

(env) C:\Users\glp\blog\env\my_blog>python manage.py startapp article

此时,我们的项目结构是这样的:

my_blog

│ db.sqlite3

│ manage.py

├─article

│ │ admin.py

│ │ apps.py

│ │ models.py

│ │ tests.py

│ │ views.py

│ │ __init__.py

│ │

│ └─migrations

│ └─ __init__.py

└─my_blog

│ settings.py

│ urls.py

│ wsgi.py

└─ __init__.py

根目录my_blog是我们的项目名称。db.sqlite3是数据库文件,用来存储数据的。manage.py是执行命令用的工具,后面会经常用到。article是我们刚刚创建的APP。最下面的my_blog是创建项目时自动生成的APP,其中的settings.py是配置文件,urls.py是根路由文件。

我们刚刚创建了一个APP,需要在配置文件settings.py中进行注册,把APP名字添加到INSTALLED_APPS中。后面每次创建APP都要记得在settings.py中注册,否则会报错。

my_blog/settings.py

INSTALLED_APPS = [

# 其他代码

...

# 注册article应用

'article',

]

访问路径url也要在urls.py中配置。

my_blog/urls.py

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

# 其他代码

...

# 配置article应用的url

path('article/', include('article.urls', namespace='article')),

]

article/是项目给article应用分配的访问路径。article.urls是article应用的路由文件,这个文件没有自动生成,后面需要手动创建。namespace相当于给article应用的路径起了个外号,后面编码会用到。如果这里有疑惑,接着看下去,后面有总结。

在article文件夹中创建文件urls.py,然后输入下面的内容。

article/urls.py

from django.urls import path

app_name = 'article'

urlpatterns = [

]

我们在编写Django项目的时候,主要在三个地方写代码:模型(model),视图(view),模板(template)。模型和数据库打交道,负责规定数据库存储什么样的数据,比如文章名、作者、文章内容。视图从模型中取出数据,进行逻辑处理之后,把数据传给模板。模板接收到数据之后,展示到网页上。这里的描述不是十分精确,了解大概意思就行,后面会逐步加深对这三者的理解。

打开article目录下的models.py文件,输入下面的代码。

article/models.py

from django.db import models

from django.contrib.auth.models import User

from django.utils import timezone

class ArticlePost(models.Model):

author = models.ForeignKey(User, on_delete=models.CASCADE)

title = models.CharField(max_length=100)

body = models.TextField()

created = models.DateTimeField(default=timezone.now)

updated = models.DateTimeField(auto_now=True)

class Meta:

ordering = ('-created',)

def __str__(self):

return self.title

这里要说一下自学编程的学习方法。如果在学习中遇到了不懂的地方,所看的教程又没有解释,那么一定要学会使用搜索引擎,推荐使用谷歌、多吉。在搜索的过程中,提升自己从问题中提炼关键词的能力。比如这里的on_delete,完全就可以通过搜索引擎明白这是什么。

这个model定义了一篇文章的属性。作者和文章有一对一(一个作者只写了一篇文章)和一对多(一个作者写了多篇文章)两种关系,author使用外键ForeignKey关联到了User。类比:如果我们定义一个学生的模型,那么应该这么写:

class 学生(models.Model):

班级 = models.ForeignKey(班级类)

前面的班级是学生的一个属性,后面的班级类是一个类。

created和updated分别会在文章被创建和被修改的时候自动生成当时的时间,不用手动填写。

Meta是一个内部类,用来定义字段以外的属性(字段的意思是模型里面的属性,如author、title、body都是一个个字段),ordering表明了文章的排序方式,按照创建时间的倒序排列,也就是新创建的文章排在最前面。__str__方法向外展示了该数据显示的名称,在Django后台管理部分我们会看到它的效果。

我们写好模型文件之后,需要执行数据迁移,把models.py中规定的字段添加到db.sqlite3文件中。我们每一次对modles.py进行修改,都要执行一次迁移,否则不会生效。

使用cmd进入虚拟环境,使用python manage.py makemigrations生成迁移文件,再使用python manage.py migrate执行迁移。

C:\Users\glp>cd blog\env\my_blog

C:\Users\glp>cd blog\env\my_blog>..\Scripts\activate

(env) C:\Users\glp\blog\env\my_blog>python manage.py makemigrations

(env) C:\Users\glp\blog\env\my_blog>python manage.py migrate

到这里为止,我们就把模型写好了,它定义了数据库存储的数据应该是什么样的。下面开始写视图,再提醒一下,视图用来从模型中获取数据并进行逻辑处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值