Django笔三 模型与后台

在django的settings文件中,这部分是关于数据库的配置

学习的话就不需要改里面的配置,默认用了自带的sqlite库。这种数据库就是一个文件。如果用mysql这种数据库,这里就需要改变相应的配置。

模型

简单来说,模型就是一种通过代码的方式来对数据库进行增删改查的操作。而不需要使用sql语句。

在polls下的models文件输入以下代码

from django.db import models

# Create your models here.


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

上面的代码,每个类都是django.db.models.Model的子类。一个类就代表数据库的一张表。每个字段都是Field类的一个实例。比如CharField(用来保存字符串数据)和DateTimeField(用来保存时间类型)。它们用来控制每个字段保存的数据类型

每一个Field实例的名字就是数据库字段的名字(如question_text)。

Field实例可以使用一些参数,比如max_length,定义最大长度。这不仅是数据库需要,同时也会用于数据验证功能。

启用模型

需要将应用添加到项目中,需要在INSTALLED_APPS中增加应用的配置文件链接。对于本例的应用配置文件PollsConfig是polls/apps.py。所以它的点式路径是polls.apps.PollsConfig

一般只需要输入polls也是可以的

然后再运行makemigrations命令,这是一个对models文件修改进行检查,并且保存这些修改为一个迁移(migration)

python manage.py makemigrations polls

可以通过下面命令来查看执行的sql是什么样的

python manage.py sqlmigrate polls 0001

然后再执行migrate命令,这是一个对数据库真正进行执行的命令

python manage.py migrate

所以修改模型分为三步

  • 在models.py中修改模型;
  • 运行python manage.py makemigrations为改动创建迁移记录;
  • 运行python manage.py migrate,将操作同步到数据库。

之所以需要第二步,这是因为如果使用了git等软件。就可以知道对models文件做了哪些修改

使用模型api

进行python的交互环境,尝试使用Django提供的数据库访问api。输入命令:

python manage.py shell

先导入写好的模型类

from polls.models import Question, Choice

创建一个Quertion对象

# 创建一个新的question对象
# Django推荐使用timezone.now()代替python内置的datetime.datetime.now()
# 这个timezone就来自于Django的依赖库pytz
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())

保存对象

# 你必须显式的调用save()方法,才能将对象保存到数据库内
q.save()

默认会获得一个自增id主键

通过对象属性调用方式,查看模型字段的值

修改属性的值,通过save()来保存

objects.all() 用于查询数据库内的所有questions

上面的<Question: Question object>是一个不可读的内容展示,你无法从中获得任何直观的信息,为此我们需要改动一下代码,让Django在打印对象时显示一些我们指定的信息。 

返回models文件增加__str__方法,并且增加一个可以判断是否最近发布的方法,然后重新启动交互环境。

from django.db import models
from django.utils import timezone
import datetime

# Create your models here.


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

先看下__star__()的效果

Django提供了大量关键字参数查询API

看下自己定义的方法是否有用

创建3个choices

Choice对象可通过API访问和他们关联的Question对象

admin后台管理站点

Django可以基于项目的models创建一个后台管理站点

1.创建管理员用户,输入命令

python manage.py createsuperuser

然后会让你输入用户名,邮箱和密码,如果密码太过简单会提示,可以Y强制通过

2.访问后台管理站点

http://127.0.0.1:8000/admin/

访问这个地址可以看到登录界面。

在这里可以把管理站点的地址改掉,毕竟叫admin太容易猜到了

登录后是这样的

3.在admin中注册投票应用

在admin.py文件加入以下代码

from django.contrib import admin
from .models import Question
from .models import Choice
# Register your models here.

admin.site.register(Question)
admin.site.register(Choice)

 刷新管理站点

可以对Questions和Choices进行新增,并且可以对已有的进行修改。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值