一、创建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']
其中__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结果,表示执行成功。
再次执行“python manage.py migrate”命令。
小知识: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,以进行数据库的增删改查等操作。
下面的操作中,我们利用create命令给数据库添加了两条记录,操作完之后,通过quit()命令退出shell。
更多的数据库操作命令:
>>> 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”命令,输入用户名, 邮箱, 密码,设置后台账号。
启动应用,输入“python manage.py runserver localhost:9000”
现在可以在浏览器中输入localhost:9000/admin输入账户和密码进入后台管理, 如下:
进去之后的界面是这样的
但是你会发现并没有数据库信息的增加和删除, 现在我们在my_blog/article/admin.py中增加代码,将admin.py修改成如下所示:
再次刷新页面, localhost:9000/admin
四、美化后台
1、安装Bootstrap
输入“pip install bootstrap-admin”。
打开my_blog/my_blog/setting.py,修改INSTALLED_APPS
保存后, 再次刷新页面, 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
上面是教程中的方法,我在实验楼实验的时候没问题,但是在自己的电脑上运行的时候,出现上面的错误信息,于是添加一行代码,问题解决:
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( 'django.core.context_processors.request', )
添加代码后的效果图:
再次运行:
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
尊重版权,转载时务必以链接形式注明作者和原始出处及本声明。