前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 学习笔记 | 2、模型

Django 学习笔记 | 2、模型

作者头像
TeamsSix
发布2020-03-12 22:10:52
5850
发布2020-03-12 22:10:52
举报

0x00 模型

  • 当前项目的开发, 都是数据驱动的
  • 使用Django进行数据库开发的提示 :
    • MVT设计模式中的Model, 专门负责和数据库交互.对应(models.py)
    • 由于Model中内嵌了ORM框架, 所以不需要直接面向数据库编程
    • 而是定义模型类, 通过模型类和对象完成数据库表的增删改查
    • ORM框架就是把数据库表的行与相应的对象建立关联, 互相转换.使得数据库的操作面向对象
  • 使用Django进行数据库开发的步骤 :
    1. 定义模型类
    2. 模型迁移
    3. 操作数据库

1、定义模型类

在这之前需要先设计数据库的表什么的,这里就不详细的说了(主要是我太懒了),感兴趣的可以看本文的参考链接,下面直接贴定义模型类的代码。

代码语言:javascript
复制
# BookManager/Book/models.py
from django.db import models

class BookInfo(models.Model):  # 定义数据信息类模型
  name = models.CharField(max_length=10)  # 设计name属性
  
class PeopleInfo(models.Model):  # 定义人物信息类模型
  name = models.CharField(max_length=10)
  gender = models.BooleanField()
  book = models.ForeignKey(BookInfo)

2、模型迁移

由两步完成,首先生成迁移文件,根据模型类生成创建表的语句;接下来执行迁移,根据第一步生成的语句在数据库中创建表。分别由以下两句完成。

代码语言:javascript
复制
python3 manage.py makemigrations
python3 manage.py migrate

运行结果:

代码语言:javascript
复制
BookManager/ > python3 manage.py makemigrations
Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
………内容太多,此处省略………
TypeError: __init__() missing 1 required positional argument: 'on_delete'

在运行第一个命令的时候报错了,此时只需要修改定义外键的那行代码即可。

代码语言:javascript
复制
# 原来的
book = models.ForeignKey(BookInfo)
#修改后
book = models.ForeignKey(BookInfo,on_delete=models.CASCADE)

发生这个错误的原因是由于我看的教程使用的是1.8版本的Django,而我安装的是3.0,Django在2.0版本后,如果定义外键就需要加上on_delete选项了,OK,接下来,继续运行这两个代码。

代码语言:javascript
复制
BookManager/ > python3 manage.py makemigrations
Migrations for 'Book':
  Book\migrations\0001_initial.py
    - Create model BookInfo
    - Create model PeopleInfo

BookManager/ > python3 manage.py migrate
Operations to perform:
  Apply all migrations: Book, admin, auth, contenttypes, sessions
Running migrations:
  Applying Book.0001_initial... OK
………内容太多,此处省略………
  Applying sessions.0001_initial... OK

到此,将主目录下生成的db.sqlite3文件拖拽到Database窗口中即可,如果没有Database的窗口,可以用Pycharm专业版试试。

0x01 站点管理

  • 站点分为内容发布和公共访问两部分。
  • 使用django站点管理模块步骤:
    • 管理界面本地化
    • 创建管理员
    • 注册模型类
    • 自定义站点管理界面

1、管理界面本地化

将语言,时间设置为本地的语言时间,大陆使用的简体中文,时区使用亚洲/上海时区,修改settings.py文件。

ps:为什么是上海时区,而不是北京时区?可能老外感觉上海才是国际大都市,北京只是二三线城市,毕竟老外对中国的印象都是陆家嘴而不是天安门(道听途说,不要当真)

代码语言:javascript
复制
# BookManager/BookManager/settings.py
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

2、创建管理员

代码语言:javascript
复制
python3 manage.py createsuperuser

运行命令

代码语言:javascript
复制
BookManager/ > python3 manage.py createsuperuser
用户名 (leave blank to use 'dora'): test
电子邮件地址: test@test.com
Password:
Password (again):
Superuser created successfully.

运行服务

代码语言:javascript
复制
BookManager/ > python3 manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
February 29, 2020 - 20:52:43
Django version 3.0.3, using settings 'BookManager.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

运行之后,在浏览器打开 http://127.0.0.1:8000/admin,使用刚才创建的用户名密码登陆。

3、注册模型类

刚打开管理员界面的时候,只能看到认证和授权管理栏,这时候就需要将模型类注册进去。

修改admin.py代码

代码语言:javascript
复制
# BookManager/Book/admin.py
from django.contrib import admin
from Book.models import BookInfo,PeopleInfo
admin.site.register(BookInfo)
admin.site.register(PeopleInfo)

刷新浏览器页面,即可看到刚添加的两个模型类。如果页面无法加载,可以看看是不是服务出现异常,如果出现异常,重新启动服务即可。

4、自定义站点管理界面

在管理页面中,随便添加点数据,之后会发现书籍的名称都显示成了BookInfo object

此时,只需要在model.py里的class里添加以下内容即可。

代码语言:javascript
复制
def __str__(self):
    return self.name

model.py完整的代码就是这个样子:

代码语言:javascript
复制
# BookManager/Book/models.py
from django.db import models

class BookInfo(models.Model):  # 定义数据信息类模型
  name = models.CharField(max_length=10)  # 设计name属性
  def __str__(self):
    return self.name

class PeopleInfo(models.Model):  # 定义人物信息类模型
  name = models.CharField(max_length=10)
  gender = models.BooleanField()
  book = models.ForeignKey(BookInfo,on_delete=models.CASCADE)
  def __str__(self):
    return self.name

此时,再刷新页面,就可以看到显示正常了,同样 people info 界面也是正常的了。

但是,这样显示还是不够直观,所以就需要自定义站点管理界面了,接下来修改admin.py页面,添加以下语句:

代码语言:javascript
复制
class PeopleInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'gender', 'book']

admin.py完成的代码如下:

代码语言:javascript
复制
# BookManager/Book/admin.py
from django.contrib import admin
from Book.models import BookInfo, PeopleInfo

class PeopleInfoAdmin(admin.ModelAdmin):
  list_display = ['id', 'name', 'gender', 'book']

admin.site.register(BookInfo)
admin.site.register(PeopleInfo, PeopleInfoAdmin)#注意此处添加PeopleInfoAdmin以注册

再来刷新一下页面,就舒服很多了。

原文链接:https://www.teamssix.com/year/200229-223431.html 参考链接: https://youtu.be/BXyGr9JQVcc https://www.cnblogs.com/Demon-Mx/p/8385318.html https://blog.csdn.net/qq_35965090/article/details/81663941


往期推荐

Django 学习笔记 | 1、基础概念和MVT架构

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TeamsSix 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 模型
    • 1、定义模型类
      • 2、模型迁移
      • 0x01 站点管理
        • 1、管理界面本地化
          • 2、创建管理员
            • 3、注册模型类
              • 4、自定义站点管理界面
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档