前言
Django是一个开源的Web应用框架,由Python写成,它的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django采用MVC设计模式注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yourself)。
Django is a web framework for perfectionists with deadlines. Django makes it easier to build better Web apps more quickly and with less code.
本篇介绍如何在Ubuntu中开发Django项目。
搭建Django环境
1、安装Apache
sudo apt-get install apache2
2、安装mysql
sudo apt-get install mysql-server mysql-client
3、安装easy_install和pip
python程序会使用很多模块,通常安装模块的方法是找到官方网站,选择合适的版本下载安装,很麻烦。为了简化安装第三方的模块,python提供了easy_install 和pip 工具,只需要一条命令就可以安装合适的模块。easy_install是python-setuptools包里的一个命令,所以只要安装python-setuptools就可以了。
sudo apt-get install python-setuptools
安装好之后就可以用 easy_install +模块名称 来安装模块了,现在安装pip。pip是一个可以替代 easy_install 的安装和管理 python 软件包的工具,提供更好的提示信息,可以删除包。linux自带的python版本比较低,软件源里没有python-pip包,不过我们可以先按照上面安装easy-install,再用easy_install安装pip。
sudo easy_install pip
easy_install的用法:
1)安装一个包
easy_install <package_name>
easy_install "<package_name>==<version>"
2)升级一个包
easy_install -U "<package_name>>=<version>"
pip的用法:
1)安装一个包
pip install <package_name>
pip install "<package_name>==<version>"
2)升级一个包 (如果不提供version号,升级到最新版本)
pip install --upgrade <package_name>>=<version>
3)删除一个包
pip uninstall <package_name>
4、安装Django
sudo pip install Django==1.6.5
sudo apt-get install python-mysqldb
开发步骤
1、创建工程mysite
django-admin.py startproject mysite
工程目录结构:
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。
settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py ----- 负责把URL模式映射到应用程序。
2、创建blog应用
cd mysite
python manage.py startapp blog
blog目录结构如下:
├── blog
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
3、配置数据库
修改mysite/mysite/setting.py中的数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangoDB',
'HOST': '',
'PORT': '',
'USER': 'root',
'PASSWORD': 'root',
}
}
在终端控制台中输入
sudo -i
mysql
>>> show databases;
>>> create database djangoDB;
初始化项目数据库,并设置项目mysite特权用户'root' 的信息:
python manage.py syncdb
...
You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): 用户名(默认当前系统用户名)
Email address: 邮箱地址
Password: 密码
Password (again): 重复密码
Superuser created successfully.
4、修改项目配置
修改mysite/mysite/setting.py中的install app配置
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # 末尾添加app 'blog',如果blog有子目录subapp,则添加'blog.subapp'
)
在我们创建django项目时,admin就已经创建,admin 是Django 自带的一个后台管理系统,打开mysite/mysite/urls.py文件:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
5、启动django项目
python manage.py runserver
浏览器输入http://127.0.0.1:8000/admin
输入用户、密码,用户名密码为第一次创建数据库时创建的。回想“设置数据库”时的设置。
6、设计Model(即数据库schema表)
现在我们打开blog目录下的models.py文件,这是我们定义blog数据结构的地方。打开mysite/blog/models.py 文件进行修改:
from django.db import models
from django.contrib import admin
# Create your models here.
class BlogsPost(models.Model):
title = models.CharField(max_length = 150)
body = models.TextField()
timestamp = models.DateTimeField()
admin.site.register(BlogsPost)
# 这一句可以不加,直接在mysql数据库djangoDB中建表BlogsPost(title,body,timestamp),但不出现在admin管理界面
再次初始化数据库
python manage.py makemigrations blog
python manage.py syncdb
再次runserver,可以见到
7、设置admin 的BlogsPost界面
打开mysite/blog/models.py 文件,做如下修改:
from django.db import models
from django.contrib import admin
# Create your models here.
class BlogsPost(models.Model):
title = models.CharField(max_length = 150)
body = models.TextField()
timestamp = models.DateTimeField()
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp')
admin.site.register(BlogsPost, BlogPostAdmin)
创建BlogPostAdmin类,继承admin.ModelAdmin父类,以列表的形式显示BlogPost的标题和时间。
8、创建blog的公共部分
从Django的角度看,一个页面具有三个典型的组件:
一个模板(template):模板负责把传递进来的信息显示出来,即html界面。
一个视图(view):视图负责从数据库获取需要显示的信息。
一个映射(url):它负责把收到的请求和你的视图函数匹配,有时候也会向视图传递一些参数。
8.1 创建模板
在blog项目下创建templates目录(mysite/blog/templates/),在目录下创建模板文件index.html,主要内容如下(类似jsp,这里的blog_list 是view传递给template的参数):
{% for var in blog_list %}
<h2>{{ var.title }}</h2>
<p>{{ var.timestamp }}</p>
<p>{{ var.body }}</p>
{% endfor%}
8.2 创建视图函数
打开mysite/blog/views.py文件:
from django.shortcuts import render
from blog.models import BlogsPost
from django.shortcuts import render_to_response
# Create your views here.
def index(request):
blog_list = BlogsPost.objects.all()
return render_to_response('index.html',{'blog_list' : blog_list})
blog_list = BlogPost.objects.all() :获取数据库里面所拥有BlogPost对象
render_to_response()返回一个页面(index.html),顺带把数据库中查询出来的所有博客内容(blog_list)也一并返回。
8.3 创建blog的URL模式
在mysite/urls.py文件里添加blog的url:
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^index/$', 'blog.views.index'),
# 在浏览器输入127.0.0.1:8000/index时通过blog.views.index函数访问index.html
)
再次runserver,访问http://127.0.0.1:8000/index
9、添加样式(前端)
创建基础模板,在mysite/blog/templates目录里创建base.html的模板(跟jsp差不多):
<html>
<style type="text/css">
body{color:#efd;background:#453;padding:0 5em;margin:0}
h1{padding:2em 1em;background:#675}
h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
p{margin:1em 0}
</style>
<body>
<h1>虫师blog</h1>
<h3>大人不华,君子务实</h3>
{% block content %}
{% endblock %}
</body>
</html>
修改index.html模板,让它引用base.html模板和它的“content”块。
{% extends "base.html" %}
{% block content %}
{% for var in blog_list %}
<h2>{{ var.title }}</h2>
<p>{{ var.timestamp | date:"1,F jS"}}</p>
<p>{{ var.body }}</p>
{% endfor %}
{% endblock %}
10、国际化和本地化
请参考这篇:Django国际化和本地化
msgfmt django.po -o django.mo
前端框架
bootstrap+jQuery:Bootstrap 教程 | 菜鸟教程
最佳实践
☆开源项目:http://git.oschina.net/lichun19960112/bootcamp
参考:https://my.oschina.net/keyven/blog/725887
http://blog.youkuaiyun.com/sicexpn/article/details/39475983