1. 使用django-admin.py 创建mysite项目
[email protected]:~/PycharmProjects$ django-admin.py startproject mysite
2. 进入项目目录中,启动服务器,测试连通性
[email protected]:~/PycharmProjects$ cd mysite/ [email protected]-ThinkPad-T450:~/PycharmProjects/mysite$ ./manage.py runserver 0.0.0.0:8000 Validating models... 0 errors found April 29, 2016 - 06:20:27 Django version 1.6.5, using settings ‘mysite.settings‘ Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C. [29/Apr/2016 06:20:33] "GET / HTTP/1.1" 200 1757
3. 创建blog应用
[email protected]:~/PycharmProjects/mysite$ ./manage.py startapp blog [email protected]-ThinkPad-T450:~/PycharmProjects/mysite$ tree . ├── blog │ ├── admin.py │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── mysite ├── __init__.py ├── __init__.pyc ├── settings.py ├── settings.pyc ├── urls.py ├── urls.pyc ├── wsgi.py └── wsgi.pyc 2 directories, 14 files
4. 告诉Django这个app是项目的一部分,编辑setting.py配置文件
INSTALLED_APPS = ( ‘django.contrib.auth‘, ‘django.contrib.admin‘,‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘blog‘, #添加的部分,注意后面的,号 )
5. 设计Model
基于Django的blog应用的核心部分:models.py。这是定义blog数据结构的地方。根据DRY(代码不重复)原则,Django会尽量利用你提供给应用程序的model信息。
5.1 在blog包下的models.py下编写下面代码:设置了3个变量,有一个默认的id变量,是自增的。(其实就是数据库列)
from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.DateTimeField()
5.2 设置数据库(使用的是MySQL)
Django中默认使用的是SQLite,我在这里使用的是MySQL,则需要在配置文件中修改数据库的基本信息(首先创建数据库,名为djangodb):
DATABASES = { ‘default‘:{ ‘ENGINE‘:‘django.db.backends.mysql‘, ‘NAME‘:‘djangodb‘, ‘USER‘:‘root‘, ‘PASSWORD‘:‘×××××ב,#连接数据库服务器的密码 ‘HOST‘:‘localhost‘, ‘PORT‘:‘3306‘, } }
5.3 创建表
[email protected]:~/PycharmProjects/mysite$ ./manage.py syncdb
当执行syncdb命令时,Django会查找INSTALLED_APPS里的每一个models.py文件,并为找到的每一个model都创建一张数据表。对照上图与配置文件INSTALLED_APPS中的参数,可以看到syncdb为每一个app都创建了一个或多个表。
syncdb命令的输出除了上图,还有
You just installed Django‘s auth system, which means you don‘t have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use ‘sunny‘): Email address: Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
这才是完整输出。这之后,我在auth系统里建立了一个超级用户,便于加入Django的自动admin应用。
5.4 设置自动admin应用
自动化的后台应用程序admin称得上是Django的明珠,为WEB应用创建简单CRUD接口的福音。由于这不是Django里的必要组件,则必须在setting.py文件里指定使用它。需要在INSTALLED_APPS元组里的‘django.contrib.auth‘下面添加一行‘django.contrib.admin‘;
每次往项目中添加新的应用后,都要运行一下syncdb命令以确保它所需的表已经在数据库里创建。
查看urls.py里的代码:
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns(‘‘, # Examples: # url(r‘^$‘, ‘mysite.views.home‘, name=‘home‘), # url(r‘^blog/‘, include(‘blog.urls‘)), url(r‘^admin/‘, include(admin.site.urls)), #告诉Django去加载默认的admin站点,这是被用于contrib admin应用程序的一个特殊对象。 )
之后,需要将编辑的应用程序告诉Django要在admin窗口里显示哪一个model以供编辑。编辑blog中models.py中的代码,只需要定义之前提到的默认admin站点,并向其注册BlogPost model就行:
from django.db import models from django.contrib import admin class BlogPost(models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.DateTimeField() admin.site.register(BlogPost)
6. 使用admin
运行./manage.py runserver 命令,然后在浏览器里输入http://127.0.0.1:8000/admin/,则会出现一个登陆窗口
使用超级用户的用户名和密码登陆之后,会出现下面的界面:
点击BlogPost后面的添加,里面会出现model中的三个元素title、 body、timestampe,添加完后点击save;
在models.py文件里再添加一个BlogPostAdmin类,并将它添加到注册代码中去:
from django.db import models from django.contrib import admin class BlogPost(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(BlogPost,BlogPostAdmin)
根据BlogPostAdmin类中的list_display变量(title,timestamp)来生成输出;
7. 建立Blog的公共部分
这部分是面向公众的页面部分。从Django的角度来说,一个页面具有三个典型的组件:
- 一个模板(template),负责将传递进来的信息显示出来(用一种类似Python字典的对象Context)。
- 一个视图(view),负责获取要显示的信息,通常都是从数据库里取得。
- 一个URL模式,用来把收到的请求和视图函数匹配,有时会向视图传递一些参数。
7.1 创建模板(template)