Home >  > Django 教程之二:数据库、后台

Django 教程之二:数据库、后台

0

一、创建models
打开my_blog/article/models.py文件,将下面的代码添加到文件的末尾:

class Article(models.Model) :
    title = models.CharField(max_length = 100)  #博客题目
    category = models.CharField(max_length = 50, blank = True)  #博客标签
    date_time = models.DateTimeField(auto_now_add = True)  #博客日期
    content = models.TextField(blank = True, null = True)  #博客文章正文

    #python2使用__unicode__, python3使用__str__
    def __str__(self) :
        return self.title

    class Meta:  #按时间下降排序
        ordering = ['-date_time']

添加后的效果是这样的:
Snap18139

其中__str__(self) 函数Article对象要怎么表示自己, 一般系统默认使用<Article: Article object> 来表示对象, 通过这个函数可以告诉系统使用title字段来表示这个对象

CharField 用于存储字符串, max_length设置最大长度
TextField 用于存储大量文本
DateTimeField 用于存储时间, auto_now_add设置True表示自动设置对象增加时间

二、同步数据库

执行“python manage.py migrate”命令,会提示models已经修改,需要先运行makemigrations命令,那么我们先执行“python manage.py makemigrations”命令,得到create model Article结果,表示执行成功。

Snap18140

再次执行“python manage.py migrate”命令。

Snap18141

小知识:python manage.py migrate和python manage.py makemigrations的作用。

很多Python初学者对这里为什么要执行python manage.py migrate和python manage.py makemigrations这两个命令存在疑惑,其实这两个命令的区别也只是 makemigrations和migrate的区别,简单地说,他们的区别就是:

Makemigrations:用models里面的model和当前的migrations文件夹里面的model做对比,如果有新的修改,就生成新一个的的文件,存放在项目app的migrations文件夹下面。

Migrate:首次执行Migrate时,会在django数据库中自动生成一个django_migrations表,以后每次执行Migrate命令,就是对比migrations文件夹中代码文件和django数据库djaong_migrations表中的代码文件,将migrations文件夹中代码文件的变化更新到数据库中,同时更新django_migrations表。

在我们上面的操作中,第一步创建了models,但是没有执行Makemigrations将models的变化反映到migrations文件夹里面的model,所以执行python manage.py migrate命令时,它提示

“No migrations to apply.

Your models have changes that are not yet reflected in a migration, and so won't be applied.

Run 'mange.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.”

三、给数据库添加内容

1、进入Django Shell

输入“python manage.py shell”命令,进入Django中的交互式shell,以进行数据库的增删改查等操作。

Snap18142

下面的操作中,我们利用create命令给数据库添加了两条记录,操作完之后,通过quit()命令退出shell。

Snap18144

更多的数据库操作命令:

>>> from article.models import Article
>>> #create数据库增加操作
>>> Article.objects.create(title = 'Hello World', category = 'Python', content = 'Let us add a database item')
<Article: Article object>
>>> Article.objects.create(title = 'Django Blog Study', category = 'Python', content = 'Django Blog Tutorial')
<Article: Article object>

>>> #all和get的数据库查看操作
>>> Article.objects.all()  #查看全部对象, 返回一个列表, 无对象返回空list
[<Article: Article object>, <Article: Article object>]
>>> Article.objects.get(id = 1)  #返回符合条件的对象
<Article: Article object>

>>> #update数据库修改操作
>>> first = Article.objects.get(id = 1)  #获取id = 1的对象
>>> first.title
'Hello World'
>>> first.date_time
datetime.datetime(2014, 12, 26, 13, 56, 48, 727425, tzinfo=<UTC>)
>>> first.content
'Let us add a database item'
>>> first.category
'Python'
>>> first.content = 'Hello World, How are you'
>>> first.content  #再次查看是否修改成功, 修改操作就是点语法
'Hello World, How are you'

>>> #delete数据库删除操作
>>> first.delete()
>>> Article.objects.all()  #此时可以看到只有一个对象了, 另一个对象已经被成功删除
[<Article: Article object>]  

>>>Article.objects.filter(title='Django Blog Study')  # 使用 filter() 按题目过滤
<QuerySet [<Article: Django Blog Study>]>

>>>Article.objects.filter(title='Django Blog Study', id="1") # 也可以多个条件
<QuerySet [<Article: Django Blog Study>]>
#上面是精确匹配 也可以包含性查询

>>>Article.objects.filter(title__contains='Django')
<QuerySet [<Article: Django Blog Study>]>

#数据排序
Article.objects.order_by("title")
Article.objects.order_by("-titile")  # 倒序

#如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),使用多个参数就可以了
Article.objects.order_by("title", "id")

#连锁查询
Article.objects.filter(title__contains='Django').order_by("-id")

#限制返回的数据数量
Article.objects.filter(title__contains='Django')[0]
Article.objects.filter(title__contains='Django')[0:3]  #可以进行类似于列表的操作

三、设置后台账号

输入“python manage.py createsuperuser”命令,输入用户名, 邮箱, 密码,设置后台账号。

Snap18145

启动应用,输入“python manage.py runserver localhost:9000”

Snap18146

现在可以在浏览器中输入localhost:9000/admin输入账户和密码进入后台管理, 如下:

Snap18147

进去之后的界面是这样的

Snap18148

但是你会发现并没有数据库信息的增加和删除, 现在我们在my_blog/article/admin.py中增加代码,将admin.py修改成如下所示:

Snap18151

再次刷新页面, localhost:9000/admin

Snap18152

四、美化后台

1、安装Bootstrap

输入“pip install bootstrap-admin”。

Snap18153

打开my_blog/my_blog/setting.py,修改INSTALLED_APPS

Snap18156

保存后, 再次刷新页面, localhost:9000/admin,会有出错信息:

bootstrap_admin: in order to use the 'sidebar menu' requires the 'django.core.context_processors.request' to be added to settings.TEMPLATE_CONTEXT_PROCESSORS

Snap18157

上面是教程中的方法,我在实验楼实验的时候没问题,但是在自己的电脑上运行的时候,出现上面的错误信息,于是添加一行代码,问题解决:

TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
        'django.core.context_processors.request',
    )

添加代码后的效果图:

Snap18158

再次运行:

Snap18159

Django 教程

Django 教程之一:创建网站项目

Django 教程之二:数据库、后台

Django 教程之三:模板的工作机制

Django 教程之四:创建模板

Django 教程之五:动态URL

Django 教程之六:Markdown和代码高亮

Django 教程之七:添加评论系统

Django 教程之八:博客的归档及其他页面

Django 教程之九:搜索和ReadMore

Django 教程之十:RSS和分页

Django 教程之十一:创建自己的模板

Django 教程之十二:修改导航栏

Django 教程之十三:改进分页功能

Django 教程之十四:服务器篇

Django 教程之十五:上传代码

Django 教程之十六:配置网站

原载:蜗牛博客
网址:http://www.snailtoday.com
尊重版权,转载时务必以链接形式注明作者和原始出处及本声明。

本文暂无标签

发表评论

*

*