Django开发简单Blog系统——下

文章目录
  1. 1. 前言
  2. 2. 超链接
  3. 3. django shell
  4. 4. Admin进阶
  5. 5. 改用mysql
  6. 6. 源码分享
  7. 7. 书签

前言

博客的基本功能完成了,接下来,我们来看一下还有哪些知识点可以加入我们的系统。

超链接

template中可以使用:

1
{% url 'app_name: url_name' param %}

  • app_name:应用命名空间的名称
  • url_name:链接名
  • param:参数

app_name和url_name都在urls.py中配置。

djsite/djsite/urls.py中

1
url(r'^blog/', include('blog.urls', namespace='blog')),

其中namespace='blog'代表的是app_name。

djsite/blog/urls.py中

1
url(r'^(?P<article_id>[0-9]+)$', views.detail, name='detail'),

其中name='detail'代表的是url_name。

比如,我们想要访问views.detail方法,那么在页面中,可以使用:

1
{% url 'blog:detail' article.id %}

实际上,这种写法并没有我们上一篇文章中的写法方便,因为ajax得到数据后无法使用这种写法,建议弃用。

django shell

django shell和python shell的不同,在于django shell里加入了项目的环境,这就方便了我们的调试。
比如,我们在django shell输入:

1
2
3
from blog.models import Article
Article.objects.all()
Article.objects.all().values()

即可打印出所有的文章。

Admin进阶

在之前的后台管理系统中,点击进入Articles,发现里面有很多Article Object,因为我们在blog/models.py中添加了__str__方法,所以显示的名称是文章标题。

那么,怎样把标题、内容、发布时间都显示出来呢?答案是修改blog/admin.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django.contrib import admin
from . import models

# Register your models here.


class ArticleAdmin(admin.ModelAdmin):
# 显示在admin控制台中的列名
list_display = ('title', 'content', 'pub_time')
# 时间过滤器
list_filter = ('pub_time',)


admin.site.register(models.Article, ArticleAdmin)

改用mysql

sqlite,做一些测试还可以,但是在实际开发中,我们通常使用mysql。

1、假设我们的数据库用户名为root,密码为空,数据库名为djsite。

2、安装pymysql
pip install pymysql

3、修改djsite/djsite/settings.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': 'djsite',
'USER': 'root',
'PASSWORD': '',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}

4、修改djsite/djsite/__init__.py

1
2
import pymysql
pymysql.install_as_MySQLdb()

5、数据迁移
python manage.py makemigrations

python manage.py migrate

6、创建超级用户
python manage.py createsuperuser

源码分享

https://github.com/voidking/djsite/releases/tag/v0.3.0

书签

django入门与实践

Django 过滤器