分类目录归档:Django

django1.8数据迁移

django 从1.7版本开始起增加了一个新的数据迁移功能,在之前如果你数据models文件做了修改,需要手动修改数据库来做数据同步,如果是线上的库,操作风险就比较高了,当然在1.6版本前也有第三方的数据迁移工具,例如south,在1.7版本前大家用这个做数据迁移的比较多,但现在从1.7版本开始就自带数据迁移功能了,因为django1.8是官方永久性支持版本,所以本篇我们是在1.8环境下的操作,如果还用老版本的兄弟,建议尽快切换新版本,因为老版本都官方都不在支持了,所以数据迁移功能对老版本用户来说,这个功能算是比较新的功能,所以有想用django1.8开发的朋友,就要了解数据迁移功能如何使用了,我们今天就来看看如何使用该功能,首先建立我们的models文件,假设我们的models.py文件内容如下:

这是一个典型的博客文章model,有了这个model,我们如何让数据库也建立相应的表呢,之前的用syncdb,但现在我们就要用migrate, 另外需要注意的是sysdb这个命令在1.9版本就没有了。

首先我们生成迁移脚本,运行:

python manage.py mkaemigrations

注:因为我之前已经同步一次数据库,所以为了看明白,我是注释了最后的pulished_date(在这行前加#号)

如果你是第一次运行,看到的内容可能给我不一样。

运行完后会生成内容如下:

Migrations for ‘blog':
0003_remove_post_published_date.py:
– Remove field published_date from post

运维完后并数据库并没有发生变化,只是生成了要操作数据库的一些脚本文件,感兴趣的可以去migrations目录里查看。

接下来运行:

python manage.py migrate

输出:

Synchronizing apps without migrations:
Creating tables…
Running deferred SQL…
Installing custom SQL…
Running migrations:
Rendering model states… DONE
Applying blog.0003_remove_post_published_date… OK

看到已经将published_date这个字段移除了,这个例子是展示的修改,如果你是第一次运行,原理也是一样,就更简单了,有了migrate,以后model的的任何改变,例如增加,删除,修改,都先makemigrations, 然后migrate二步就完成了与数据库的同步,就是这么简单。

郑重说明:以上都是在测试环境运行的结果,请千万不要在自己线上环境进行操作。

 

jquery插件datatables使用

如何把数据库中的数据以表格的形式展示到前端,实现有很多方法,最近用jquery的datatables插件来实现了发现还是比较简单的,今天我们来看一个例子,来说明这个插件的使用,基本原理是view函数从数据库中读出数据,jquery通过ajax获取数据并在前端展示出来,我们先定义一个models.py,如下:

然后定义我们的view函数:

因为datatables接收的是json格式数据,所以从数据库中读出的数据要序列化,就是这句:

json = serializers.serialize(‘json’, boject_list)

添加下url.py:

最后就是模板文件内容了:

其中url指定你的view函数名称,columns指定要显示的列,这样数据就以表格的形式展示出来了,要想美观记得自己要上样式,推荐bootstrap,datatables是一次把数据全部加载到前端来处理,所以如果你加载的条目非常多,就会有停顿感,必须要加上bServierSide参数。

手把手教你用django搭建博客(三)

这是我们《手把手教你用django搭建博客》系类的第三篇,这篇我们接上篇内容,解决如何实现首页文章分页的功能, 要实现分页要用到django的一个插件, 所以要先安装django_pagination,安装方式随意了,pip或者用自己的IDE功能来安装就可以,安装完毕后我们修改下配置文件就可以实现了,说实话,我在没用之前,真没见过实现分页如此简单的,好,废话不多说,我们开始,打开myblog下seettings.py文件,修改INSTALLED_APPS,MIDDLEWARE_CLASSES,TEMPLATE_CONTEXT_PROCESSORS这三段的内容,所以最后你的settings.py文件看起来应该像下面一样(算了,就把我的settings.py全部贴出来了吧):

设置完settings.py文件后,我们需要再修改下我们的模板文件,打开index.html,修改内容如下:

默认的{% paginante %}是在左边,我加入了<span> 标签和行css样式,这样就移到了右边,这样就完成全部的分页功能了,什么??是,你没听错,真的没有了,所以我开篇就说了,用django设置分页如此简单,平生我也是第一次见到,怎么?不信?不信启动项目,访问下:

http://127.0.0.1:8000/blog/  

看看是否已经实现了分页,这时候你看完,心头一乐,发现还TM实现了,转眼间你又心头一愣,哎,不对,这这跟开篇的第一张图不一样呀,我这分页是英文表示的,可你显示的中文:上一页,下一页呀,好吧,兄弟,算你好眼力,我们接下来就看看如何修改下默认的样式,打开pagination.html文件(在C:\Python27\Lib\site-packages\pagination\templates\pagination下),修改后如下:

把对应英文的显示换成中文就可以了,这次是真的完成了。

好吧,到现在你可以去庆祝下你所学的东西了,既然这么高兴,你可以去喝二杯,当然也可以去请找妹子吃个饭,没准还能….你懂的。

 

手把手教你用django搭建博客(二)

接上一篇,上篇我们已经创建了项目和应用,并且可以登录后台,添加文章了,不妨自己先添加几篇文章,待会我们用得到,这篇我们主要讲模板和视图函数的使用,为什么需要模板和视图呢,为方便后续的操作大家理解起来容易些,我现在在这里讲些基本的理论,为我们后续的操作做个铺垫:

在我们的文章在后台添加完毕后,我们要需要在前台页面把它展示出来,这样别人才能看到,所以前台展示的页面我们需要用模板来呈现,那模板的数据从哪里来的,我们猜也应该猜到了,是视图,没错,这部分工作是由视图函数来完成的,最后设置urls就可以访问我们的blog首页了,基本原理就介绍到这里,接下来我们来看看究竟怎么完成一个模板的撰写:

首先在blog目录下建立一个目录templates,在这个文件夹下建立2个html文件,一个叫base.html,一个是index.html,base.html这个网站放置我们页面布局中不变的内容,具体的数据内容放到我们index.html页面中,打开base.html文件,写入如下代码,然后保存:

在这个文件中,为了美观点,我引入了bootstrap的样式,这就是我们base.html文件了,现在打开index.html文件,输入如下内容,然后保存:

这样,我们所有的模板文件就全部完成了,具体的模板语法,我不具体讲解了,请大家自行补脑,我们接下来该编写视图函数了,终于视图该上场了,都快等不及了,打开blog下的 views.py文件,写入:

现在我们完成了所有代码的工作,接下来只要设置好urls就可以访问了,打开myblog下的urls.py,修改如下:

其实就是加了一行而已,因为include了一个文件,所以要便捷blog下的urls文件(如果没有就创建一个),内容如下:

大功告成,进入命令行启动项目:

然后访问:

http://127.0.0.1:8000/blog/ 

如果没什么意外的话,应该你在后台发布的文章都显示出来了,不过还有一个小问题,如果随着时间的推移,你发布了很多文章,首页会变得很长很长,影响访问速度,所以这时候就用到了我们的分页功能了,待我们下篇介绍如何实现分页。

手把手教你用django搭建博客(一)

在没看diango之前,就听说用这个框架来搭建blog是分分钟的事,耳听不如眼见,眼见不如操练,所以今天我们就详细讲解如何完成一个简单的blog搭建,如果有跟着一起练习的兄弟,请在自己电脑准备好环境:

1、提前安装好pyhont2.7

2、安装django1.6(这个很重要,因为django不同版本有些差别,尤其到1.7以上后,为保证做的过程少点艰难,请尽可能版本一致,另外现在很多网上的资料给的答案或解决方案,很多都不注明自己的版本,出问题参考的时候根本用不上,很多还是要自己去琢磨或上官网看资料)

3、找一个自己顺手的IDE开发软件

4、将python添加到系统环境变量(确保在cmd窗口可以直接执行python脚本)。

准备好上面的环境,我们就开始真是进入我们操作环节,不过在为了给小白们足够的信心,我们先看下我们最完后的blog长什么样,看图:

blog解密图

因为是简单的blog程序,所以界面也比较简单,我没用现成的blog模板来做,自己写的一个简单主页面,现在环境准备好了,最终要达成的结果也看到了,我想很多小伙伴们已经受不了,让我们挽起袖子开干吧。

首先创建项目和blog应用:

在cmd命令行下,输入:

然后进入myblog目录,命令行下输入:

这是你的myblog下有两个目录,一个是myblog,目录下有文件:__init__.py,settings.py, urls.py,wsgi.py, 一个是blog,目录下有如下文件:__init__.py,admin.py,models.py,tests.py,views.py,这些都是django自动为我们生成的,后续这些文件我们基本都会用得到,现在我们先不理会这些,用到了我们自然就会知道具体他们什么用途,现在重要的是要告诉django这个应用(app)这是我们项目的一部分,我们编辑settings.py文件,把INSTALLED_APPS里边内容修改成像如下内容一样:

好,经过以上步骤我们就把整个项目搭建起来了,下面我要进入代码部分了,其实也很简单,我们先设计我们的数据模型(Model),因为这是最基础的,发表的文章要存储起来,打开blog目录下的models.py文件,最后保存的内容如下:

这样就完了,我们一共就写了三个字段内容,文章标题,文章内容和发布时间,接下来我们要建立数据库表了,在这里我说下,django默认就支持sqlite3数据,所以,如果你采用的sqlite3数据库,你什么都不用修改,如果你采用的mysql数据库,就要设置settings.py文件里的数据库引擎,数据库名称,主机,用户,密码,这里为了简单,我用默认django的sqlite3数据库,我什么也不用设置。

再说一次,如果你用的 sqlite3数据库,请运行如下命令,建立数据库表(命令行):

运行后你会看到django创建表的输出,运行syncdb这个命令意思是django会查找INSTALLED_APPS里的每个models.py文件,然后为每个model创建一张数据表,到最后你会被问些问题(很抱歉,具体输出信息这段我没能保存下来,只能描述了),不过话说回来,提示的因为也非常简单,所有单词都没超初中英语单词水平:
第一个问题是问是否创建一个超级用户,敲yes
然后输入用户名
然后是邮件
最后是密码
然后就结束了

建立完数据库,我们注册我们的models,打开blog下的admin.py,输入:

最后在访问这前,我们设置访问的url,设置myblog/的urls.py,保存如下:

好了,启动项目,在命令行下输入:

然后可以打开我们页面看看了,在地址栏输入:

进入登录界面,输入刚才的用户和密码,就可以看到界面如下

1

其中blog是我们的应用,点击进去可以添加文章,好了,今天我们就先到这里,总结下我们今天学习了什么:

1、创建django项目和应用

2、创建Model,建立数据库表

3、设置settings文件,包含blog

4、设置urls文件,确定访问网站的url

5、注册我们的app,集成django-admin

6、访问我们的后台,添加文章

以上希望大家多练习,下一篇我们将讲解模板,视图以及分页实现。