参考文档:https://andrew-liu.gitbooks.io/django-blog/models.html
1、新建一个 django project
django-admin.py startproject my_blog
注: windows的话,如果报错,可改成:django-admin startproject project_name、
注意执行这个命令的目录路径不要包含中文,否则可能会提示报错:
my_blog的目录结构如下:
my_blog
├── manage.py
└── my_blog
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
2、新建 app
python manage.py startapp article
app:是一个功能模块, 与其他的web框架可能有很大的区别, 将不能功能放在不同的app中, 方便代码的复用。
如my_blob/settings.py文件中的:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]则是一个个功能模块。我们将我们新创建的app,加入到其中,django就可以引用这个模块。
现在在my_blog/my_blog/setting.py下添加新建app
INSTALLED_APPS = (
...
'article', #这里填写的是app的名称
)
3、运行程序
$ python manage.py runserver #启动Django中的开发服务器
#运行成功显示如下信息
System check identified no issues (0 silenced).
December 21, 2014 - 08:56:00
Django version 1.7.1, using settings 'my_blog.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
现在可以启动浏览器, 输入http://127.0.0.1:8000/, 当出现如下页面,表示启动成功。
It worked!
Congratulations on your first Django-powered page.
Next, start your first app by running python manage.py startapp [app_label]
.
You're seeing this message because you have DEBUG = True
in your Django settings file and you haven't configured any URLs. Get to work!
4、创建models
4.1 设置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
默认是sqlite3,也可以配置mysql、PostgreSQL等。
4.2 创建models
在my_blog/article/models.py下编写如下程序:
from django.db import models
# Create your models here.
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表示自动设置对象增加时间。
4.3 同步数据库
python manage.py migrate #命令行运行该命令
python manage.py makemigrations
python manage.py migrate #重新命令行运行该命令
4.4 Django shell
python manage.py shell
最后进入django shell,来进行数据表的增删改查操作。
>>> from article.models import Article
>>> #create数据库增加操作
>>> Article.objects.create(title = 'Hello World', category = 'Python', content = '我们来做一个简单的数据库增加操作')
<Article: Article object>
>>> Article.objects.create(title = 'Django Blog学习', category = 'Python', content = 'Django简单博客教程')
<Article: Article object>
>>> #all和get的数据库查看操作
>>> Article.objects.all() #查看全部对象, 返回一个列表, 无对象返回空list
[<Article: Article object>, <Article: Article object>]
>>> Article.objects.get(id = 1) #返回符合条件的对象
<Article: Article object>
5、Admin后台管理
Django有一个优秀的特性, 内置了Django admin后台管理界面, 方便管理者进行添加和删除网站的内容。
新建的项目系统已经默认为我们设置好了后台管理功能。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article',
]
同时url也添加了admin的路径:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
5.1 创建超级管理员
$ python manage.py createsuperuser
Username (leave blank to use 'andrew_liu'): root
Email address:
Password:
Password (again):
Superuser created successfully.
重新启动服务器,python manage.py runserver ,访问127.0.0.1:8000/admin,显示如下页面,输入刚创建的用户名,密码则可进入后台管理页面。
但是我们发现并没有数据库信息的增加和删除, 现在我们在my_blog/article/admin.py中增加代码:
from django.contrib import admin
from article.models import Article
# Register your models here.
admin.site.register(Article)
保存后, 再次刷新页面, 127.0.0.1:8000/admin
5.2 使用第三方插件,美化后台管理系统。
Django现在已经相对成熟, 已经有许多不错的可以使用的第三方插件可以使用, 这些插件各种各样, 现在我们使用一个第三方插件使后台管理界面更加美观, 目前大部分第三方插件可以在Django Packages 中查看,
尝试使用django-admin-bootstrap美化后台管理界面
如:
pip install bootstrap-admin
配置插件:(适用于django-1.7版本,1.8以上支持不好,需要再研究下)
然后在my_blog/my_blog/setting.py中修改INSTALLED_APPS
INSTALLED_APPS = (
'bootstrap_admin', #一定要放在`django.contrib.admin`前面
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article',
)
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
'django.core.context_processors.request',
)
BOOTSTRAP_ADMIN_SIDEBAR_MENU = True
6、配置URL和Views
request进来->从服务器获取数据->处理数据->把网页呈现出来
url
设置相当于客户端向服务器发出request请求的入口
, 并用来指明要调用的程序逻辑views
用来处理程序逻辑, 然后呈现到template(一般为GET
方法,POST
方法略有不同)template
一般为html+CSS的形式, 主要是呈现给用户的表现形式
6.1 配置views
配置一个名为home的view,和一个detail的view,其中detail里访问Model Article。
from django.shortcuts import render
from django.http import HttpResponse
from article.models import Article
# Create your views here.
def home(request):
return HttpResponse("Hello World, Django")
def detail(request, my_args):
post = Article.objects.all()[int(my_args)]
str = ("title = %s, category = %s, date_time = %s, content = %s"
% (post.title, post.category, post.date_time, post.content))
return HttpResponse(str)
6.2 配置urls
为views配置相应的路由。
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'article.views.home'),
url(r'^(?P<my_args>\d+)/$', 'article.views.detail', name='detail'),
]
现在可以访问http://127.0.0.1:8000/1/
7、添加Templates
在 article目录下新建一个 templates 文件夹,里面新建一个 test.html。默认配置下,Django 的模板系统会自动找到app下面的templates文件夹中的模板文件。
article/templates/test.html
<!--在test.html文件夹下添加-->
<!DOCTYPE html>
<html>
<head>
<title>Just test template</title>
<style>
body {
background-color: red;
}
em {
color: LightSeaGreen;
}
</style>
</head>
<body>
<h1>Hello World!</h1>
<strong>{{ current_time }}</strong>
</body>
</html>
在article/view.py中添加一个函数逻辑:
def test(request) : return render(request, 'test.html', {'current_time': datetime.now()})
然后在在my_blog/urls.py中设置对应的url
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'article.views.home'),
url(r'^(?P<my_args>\d+)/$', 'article.views.detail', name='detail'),
url(r'^test/$', 'article.views.test'),
]
重新启动服务器python manage.py runserver
, 然后在浏览器中输入http://127.0.0.1:8000/test/