Django学习(二)——创建应用程序

本文介绍如何使用Django框架创建一个学习日志应用,包括在虚拟环境中执行命令创建应用,定义模型,激活模型,管理网站,创建超级用户,以及在管理网站上注册模型。详细讲解了Topic和Entry模型的创建过程。

参考书籍:《Python编程从入门到实践》—Eric Matthes

  • 在虚拟环境中执行命令

    python manage.py startapp learning_logs

    命令让Django建立创建应用程序所需的基础设施。在learning_logs下创建了文件models.py, admin.py, views.py。我们将使用models.py来定义我们要在应用程序中管理的数据。

定义模型

目前在models.py中的内容仅一条语句from django.db import models

我们需要在模块中创建自己的模型。模型的作用是告诉Django如何处理应用程序中存储的数据。在代码层面上,我们把模型抽象为一个类。

添加代码:

class Topic(models.Model):
    """用户学习的主题"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        """返回模型的字符串表示"""
        return self.text
  • 属性text是一个由字符或文本组成的数据-CharField,主要用来存储较少量的文本信息,比如名称、标题和城市等。
  • 属性date_added是一个记录日期和时间的数据-DateTimeField。参数auto_now_add=True的意思是每当用户创建新主题时,都会让Django这个属性自动设置为当前时间。w
  • _str_()方法会打印出在这个方法中return的内容。在这里打印出属性text的值。

激活模型

  • 要使用模型,必须要让Django将应用程序包含到项目中。打开learning_log/learning_log/setting.py文件,显示如下片段:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    #my Apps
    'learning_logs' #注:需要添加该语句
]

在末行加上'learning_logs'


  • 接下来需要让Django修改数据库,使其能够存储模型Topic的相关信息。

    在终端中执行命令:python manage.py makemigrations learning_logs

    成功提示:

Migrations for 'learning_logs':   
	0001_initial.py:     
		- Create model Topic 
  • 接下来应用迁移让Django替我们修改数据库python manage.py migrate

    成功提示:

    Running migrations:    
    	Rendering model states... DONE 
        Applying learning_logs.0001_initial... OK
    

之后每次需要修改管理的数据时,都要经过以上三个步骤。①修改models.py ②调用makemigrations ③让Django迁移项目。

管理网站

创建超级用户

python manage.py createsuperuser

向管理网站注册模型

在创建应用程序时,models.py所在目录下还有一个名为admin.py的文件。

修改admin.py的代码以向管理网站注册我们之前的模型Topic

from django.contrib import admin


# Register your models here.
from learning_logs.models import Topic

admin.site.register(Topic)

添加主题

向管理网站注册Topic后,我们来添加第一个主题。为此,单击Topics进入主题网页,它几乎是空的,这是因为我们还没有添加任何主题。单击Add,你将看到一个用于添加新主题的表单。 在第一个方框中输入Chess,再单击Save,这将返回到主题管理页面,其中包含刚创建的主题。

定义模型Entry

在model.py中增加Entry类

class Entry(models.Model):     
    """学到的有关某个主题的具体知识"""      
    topic = models.ForeignKey(Topic)     
    text = models.TextField()     
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:         
        verbose_name_plural = 'entries'       
        
    def __str__(self):         
        """返回模型的字符串表示"""
        return self.text[:50] + "..." 
  • 继承了Django基类Model。
  • topic是一个ForeignKey(外键)实例,它是一个数据库术语,引用了数据库中的另一条记录。代码将每个条目关联到特定的主题。每个主题创建时都给它分配了一个键(ID)。
  • text是一个TextField实例且不受字长限制
  • 嵌套的Meta类存储用于管理模型的额外信息。
  • __str__返回的是text前50个字符加上一串省略号,用来显示简介。

接下来迁移模型即可

python manage.py makemigrations learning_logs

python manage.py migrate

向管理网站注册Entry

修改admin.py

from django.contrib import admin


# Register your models here.
from learning_logs.models import Topic,Entry

admin.site.register(Topic)
admin.site.register(Entry)

返回到http://localhost/admin/,你将看到learning_logs下列出了Entries。单击Entries的Add链接, 或者单击Entries再选择Add entry。你将看到一个下拉列表,让你能够选择要为哪个主题创建条目, 还有一个用于输入条目的文本框。

效果图:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值