Django开发博客- 模型
django的模型就是用于在数据库中存储的某种类型的对象。在我们的博客系统中, 发表的文章就是一个模型,需要存储在数据库中。 这里我们使用django默认的sqlite3库,对于我们的这个小系统而言已经足够了。
创建一个应用
在django中有两个概念需要弄清楚。一个是工程(project)的概念,一个是应用(application)的概念。 它们的关系是:一个工程中包含多个应用。每个应用都是独立的,应用通过setting.py注册到工程中来就可以使用了。 这样可以解耦合,并且好的应用也可以复用。很好的模块化设计!
在manage.py文件所在目录,执行下面命令:
(myvenv) [mango@centos00 mysite]$ python manage.py startapp blog |
你会看到一个新的blog文件夹被创建,并且下面多了许多文件,目前结构如下:
mysite |
然后在setting.py中注册这个应用
1 |
INSTALLED_APPS = ( |
创建一个博客文章的模型
在blog/models.py中定义所有的模型,用vim打开后添加下面的内容
1 |
from django.db import models |
我们定义了作者,标题,文章内容,创建时间,发布时间等。还添加了一个publish方法用于保存发布。 每个字段都需要定义它的类型,这里的几个类型解释如下:
CharField:普通的文本 |
详细的字段类型说明请参考官方文档:field-types
在数据库中为模型生成表结构:
每次我们新建了一个模型后,需要在数据库中添加对应的表。
第一步是先让django感知到我们刚刚已经创建了一个新的模型:
(myvenv) [mango@centos00 mysite]$ python manage.py makemigrations blog |
输出如下:
Migrations for 'blog': |
这时候django已经为我们准备好了数据库更新的sql文件。
第二步是让django帮我们执行这些文件:
(myvenv) [mango@centos00 mysite]$ python manage.py migrate blog |
输出如下:
Operations to perform: |
OK,这时候数据库中已经有post这张表了。
对象关系映射ORM
下面我们看看django的ORM是怎样和数据库打交道的。
首先解释下QuerySet,它是某个模型的对象列表,用来从数据库中读取数据,过滤和排序等等。
Django控制台Django Shell
执行以下命令可以打开django的控制台
(myvenv) [mango@centos00 mysite]$ python manage.py shell |
查询所有的博客文章
>>> from blog.models import Post |
这时候肯定是空的,因为我们还没有任何数据。
下面我们去新建几篇文章
先要创建一个用户,因为Post里面有User外键
>>> from django.contrib.auth.models import User |
然后添加文章:
>>> user = User.objects.get(username='ola') |
文章过滤
先像前面那样再添加几篇文章,此处省略七十二个字….
>>> Post.objects.filter(author=user) |
最后的输出表示所有的文章published_date都是空的。我想改变这个情况。可以这样做
>>> post = Post.objects.get(id=1) |
结果排序
还可以根据某个或某几个字段来排序检索结果
>>> Post.objects.order_by('created_date')
|
OK,目前为止你应该对django的ORM有了大体的了解了。
请用exit()退出django的控制台
>>> exit() |
利用django admin修改模型
在上面我们已经创建了Post模型并且通过django控制台来添加修改模型。 然后我们使用django自带的web管理界面admin来在页面上修改模型数据。
模型注册
首先我们需要在admin中注册对应的模型,打开blog/admin.py文件,修改如下
1 |
from django.contrib import admin |
注意上面的from .models import Post,使用到了python3的相对导入。
运行服务器
一切都这么简单,接下来我们启动服务器
(myvenv) [mango@centos mysite]$ python manage.py runserver 192.168.203.95:8000 |
打开链接:http://192.168.xxx.xxx:8000/admin/
看到下面的界面:

添加管理员
不过你需要一个管理员才能登录。运行python manage.py createsuperuser可以创建管理员账号。
(myvenv) [mango@centos00 mysite]$ python manage.py createsuperuser |
我创建了一个admin/admin的账户。这时候登录

点击Posts修改或者增加等等,确保里面至少2个又published_date,这个后面会用到。

更多关于django admin的内容,参考官方文档:admin
Django开发博客- 模型的更多相关文章
- django开发博客(1) 入门
现在正式开始博客开发 1.安装django1.4 如果你使用的是fedoraDVD版,安装时选择了web开发组建,这一步可以省略,因为它自带django环境 django下载地址 https://ww ...
- 纯django开发博客系统
企业级教程:纯django开发博客系统 1.视频教程 https://www.duanshuilu.com/ 2.教程文档 https://www.duanshuilu.com/ 0.课程简介1.简价 ...
- Django开发博客- 三部曲
其实在django中实现一个功能只需要三个步骤即可,这里我姑且叫它三部曲. 这三部曲就是: 定义urls映射 定义views 定义templates 什么是URL? URL就算一个WEB地址,你在浏览 ...
- 使用django开发博客过程记录4——Category分类视图
在写点击博客的所属分类,显示所有该分类的文章时真是让我想了好一会,为什么呢?因为我使用的是cbv模式开发的而不是简单的视图处理逻辑的,所以,有些操作会被包装好了,你并不知道它的细节,那么我们今天要实现 ...
- 使用django开发博客过程记录3——博客侧栏实现
说起这个侧栏真是苦恼我很长时间,一开始以为和之前的一样传递额外参数就可以了就像下面这样: class IndexView(ListView): template_name = 'apps/index. ...
- Django开发博客 入门篇
Django是神马? Django是一个开源免费的Web框架,使用Python编写.能够让你快速写出一个Web应用, 因为它包含了绝大部分的组件,比如认证,表单,ORM,Session,安全,文件上传 ...
- 使用django开发博客过程记录5——日期归档和视图重写
针对每条博客的观看次数我么是使用django的Mixin实现的: def get(self, request, *args, **kwargs): last_visit = request.sessi ...
- 使用django开发博客过程记录2——博客首页及博客详情的实现
1.什么是CBV(Class-based views) 2.博客首页及博客详情实现 1.什么是CBV 什么是CBV?说白了就是以前是视图为处理请求返回响应的函数,有了cbv之后我们就可以用类处理请求和 ...
- Django开发博客- 部署
安装Git Git是一个被大量程序员使用的”版本控制系统”.此软件可以跟踪任何时间文件的改变,这样你以后可以随时召回某个特定版本. windows系统下面可以下载git-scm安装.除了第5步”Adj ...
随机推荐
- SpringMVC拦截器2(资源和权限管理)(作为补充说明)
SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...
- C#支持文件拖拽
private void listBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataForm ...
- 在包a中新建一个类A,在类A中有一个int add(int m)方法,用来求1+2+…+m 的和。在包b中新建一个类B,在类B中有一个int cheng(int n)方法,用来求n! 的结果。在包c中新建一个主类C,调用A、B中的方法输出1+2+…+30的和, 以及5!的计算结果。
package a; public class A { public void add(int m) { int sum=0; for (int i = 1; i <=m; i++) { sum ...
- SIP进行时
一直以“简单”著称的SIP其实也没那么简单,不过任何事物想掌握它都很困难. 这篇文档旨在不断的记录SIP使用过程中遇到的各种疑惑和问题. 一.响应422 Session Interval Too Sm ...
- C# WPF MVVM 实战 – 4 - 善用 IValueConverter
IValueConverter,做 WPF 的都应该接触过,把值换成 Visibility .Margin 等等是最常见的例子,也有很多很好的博文解释过用法.本文只是解释一下,MVVM 中一些情景. ...
- 部署PDA程序的时候存储不足的解决办法
通常Windows Mobile的存储空间分为程序内存和存储内存,默认都比较小,当程序比较大的时候可能无法正常部署到设备上面,针对此问题可采用如下办法解决:1.通过VS修改,工具--选项--设备--选 ...
- nyoj325 zb的生日(DFS)
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...
- [转]使用onclick跳转到其他页面/跳转到指定url
如果是本页显示可以直接用location,方法如下: ①onclick="javascript:window.location.href='URL'" ②onclick=" ...
- 强制性签出被人没有签入的文件(在.net开发vs中)
灵感,是天才的女神.她并不步履蹒跚地走过,而是在空中像乌鸦那么警觉地飞过的,她没有什么剽带给诗人抓握,她的头是一团烈火,她溜得快,像那些白里带红的鹤,教猎人见了无可奈何.——巴尔扎克(上海网站建设) ...
- jquery 跳转到当前页面指定位置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...