django

来源:互联网 发布:c语言 变量初始化顺序 编辑:程序博客网 时间:2024/06/06 02:23

一,创建项目

1,为blog创建名为mysite的工程项目:

[python] view plain copy
  1. django-admin startproject mysite  

2, 项目结构如下:

[python] view plain copy
  1. .  
  2. └── mysite  
  3.     ├── manage.py  
  4.     └── mysite  
  5.         ├── __init__.py  
  6.         ├── settings.py  
  7.         ├── urls.py  
  8.         └── wsgi.py  

  • manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。

  • settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。

  • urls.py ----- 负责把URL模式映射到应用程序。

二,运行开发服务器

切换到工程目录,执行运行服务器命令:

[python] view plain copy
  1. huang@huangPC:~/csdn/mysite$ python manage.py runserver  
  2. Validating models...  
  3.   
  4.   
  5. 0 errors found  
  6. December 042016 - 02:35:16  
  7. Django version 1.6.1, using settings 'mysite.settings'  
  8. Starting development server at http://127.0.0.1:8000/  
  9. Quit the server with CONTROL-C.  

打开浏览器,输入访问地址:127.0.0.1:8000



三,创建blog应用

[python] view plain copy
  1. python manage.py startapp blog  

mysite应用文件结构如下:

huang@huangPC:~/csdn/mysite$ tree

[python] view plain copy
  1. huang@huangPC:~/csdn/mysite$ tree  
  2. .  
  3. ├── blog  
  4. │   ├── admin.py  
  5. │   ├── __init__.py  
  6. │   ├── models.py  
  7. │   ├── tests.py  
  8. │   └── views.py  
  9. ├── manage.py  
  10. └── mysite  
  11.     ├── __init__.py  
  12.     ├── __init__.pyc  
  13.     ├── settings.py  
  14.     ├── settings.pyc  
  15.     ├── urls.py  
  16.     ├── urls.pyc  
  17.     ├── wsgi.py  
  18.     └── wsgi.pyc  

四,设计你的Model

在blog目录下的models.py是blog应用打核心文件之一,是定义blog数据结构的地方。修改models.py,新添加BlogPost类,代码如下:

[python] view plain copy
  1. from django.db import models  
  2.   
  3. # Create your models here.  
  4. class BlogPost(models.Model):  
  5.     title = models.CharField(max_length = 150)  
  6.     body = models.TextField()  
  7.     timestamp = models.DateTimeField()  

BlogPost类是django.db.models.Model的一个子类 。它有变量title(blog的标题),body(blog的内容部分),timestamp(blog的发表时间)。

五,设置数据库

 Dajango支持主流的数据库服务器(MySQL,PostgreSQL,Oracle和MSSQL),在这里使用的是SQLite,这里之需要通过一条简单的命令可以创建SQLite数据库。

创建数据库:

切换到工程主目录mysite/下,执行如下命令:

[python] view plain copy
  1. python manage.py syncdb  
出现下面的提示,输入yes,然后安装提示输入相关信息即可。完成后会生成一个数据库文件db.sqllite3。
[python] view plain copy
  1. huang@huangPC:~/csdn/mysite/blog$ cd ..  
  2. huang@huangPC:~/csdn/mysite$ python manage.py syncdb  
  3. Creating tables ...  
  4. Creating table django_admin_log  
  5. Creating table auth_permission  
  6. Creating table auth_group_permissions  
  7. Creating table auth_group  
  8. Creating table auth_user_groups  
  9. Creating table auth_user_user_permissions  
  10. Creating table auth_user  
  11. Creating table django_content_type  
  12. Creating table django_session  
  13.   
  14. You just installed Django's auth system, which means you don't have any superusers defined.  
  15. Would you like to create one now? (yes/no):    

之后文件目录如下:

[python] view plain copy
  1. huang@huangPC:~/csdn/mysite$ tree  
  2. .  
  3. ├── blog  
  4. │   ├── admin.py  
  5. │   ├── __init__.py  
  6. │   ├── models.py  
  7. │   ├── tests.py  
  8. │   └── views.py  
  9. ├── db.sqlite3  
  10. ├── manage.py  
  11. └── mysite  
  12.     ├── __init__.py  
  13.     ├── __init__.pyc  
  14.     ├── settings.py  
  15.     ├── settings.pyc  
  16.     ├── urls.py  
  17.     ├── urls.pyc  
  18.     ├── wsgi.py  
  19.     └── wsgi.pyc  

六,设置自动admin应用

1,打开mysite/mysite/urls.py,取消注释url(r'^admin/', include(admin.site.urls))

[python] view plain copy
  1. from django.conf.urls import patterns, include, url  
  2.   
  3. from django.contrib import admin  
  4. admin.autodiscover()  
  5.   
  6. urlpatterns = patterns('',  
  7.     # Examples:  
  8.     # url(r'^$', 'mysite.views.home', name='home'),  
  9.     # url(r'^blog/', include('blog.urls')),  
  10.   
  11.     url(r'^admin/', include(admin.site.urls)),  
  12. )  

2,编辑mysite/mysite/settings.py,在INSTALLED_APPS里面添加blog应用。

    添加后的代码如下:

[python] view plain copy
  1. # Application definition  
  2.   
  3. INSTALLED_APPS = (  
  4.     'django.contrib.admin',  
  5.     'django.contrib.auth',  
  6.     'django.contrib.contenttypes',  
  7.     'django.contrib.sessions',  
  8.     'django.contrib.messages',  
  9.     'django.contrib.staticfiles',  
  10.     'blog',  
  11. )  

3,修改mysite/blog/models.py

在最后添加一行代码:

[python] view plain copy
  1. <code class="hljs css"><span style="font-family:Consolas,微软雅黑,monospace,Verdana,sans-serif,宋体"><span class="hljs-selector-tag"><span class="hljs-selector-tag">admin</span></span><span class="hljs-selector-class"><span class="hljs-selector-class">.site</span></span><span class="hljs-selector-class"><span class="hljs-selector-class">.register</span></span>(<span class="hljs-selector-tag"><span class="hljs-selector-tag">BlogPost</span></span>)</span></code>  

代码如下:

[python] view plain copy
  1. from django.db import models  
  2. from django.contrib import admin  
  3. # Create your models here.  
  4. class BlogPost(models.Model):  
  5.     title = models.CharField(max_length = 150)  
  6.     body = models.TextField()  
  7.     timestamp = models.DateTimeField()  
  8.   
  9. admin.site.register(BlogPost)  

4,打开浏览器,输入http://127.0.0.1:8000/admin/,输入刚才创建数据库时候填写的帐号就能进入admin界面。



七,使用admin

1, 点击Blog Posts右侧的Add和Save按钮,添加一个帖子。


2,让admin的BlogPost界面更加美观

修改blog应用的models.py,为它添加一个admin.ModelAdmin的子类BlogPostAdmin.以列表形式显示BlogPost的标题和时间。

[python] view plain copy
  1. from django.db import models  
  2. from django.contrib import admin  
  3.   
  4. # Create your models here.  
  5. class BlogPost(models.Model):  
  6.     title = models.CharField(max_length = 150)  
  7.     body = models.TextField()  
  8.     timestamp = models.DateTimeField()  
  9.   
  10. class BlogPostAdmin(admin.ModelAdmin):  
  11.     list_display = ('title','timestamp')  
  12.   
  13. admin.site.register(BlogPost,BlogPostAdmin)  
刷新浏览器,如若出现如下问题:



在mysite目录运行如下命令,后再次刷新。

[python] view plain copy
  1. huang@huangPC:~/csdn/mysite$ python manage.py syncdb  
  2. Creating tables ...  
  3. Creating table blog_blogpost  
  4. Installing custom SQL ...  
  5. Installing indexes ...  
  6. Installed 0 object(s) from 0 fixture(s)  


八,建立Blog的公共部分。

从Django的角度看,一个页面具有三个典型的组件:

  • 一个模板(template):模板负责把传递进来的信息显示出来。

  • 一个视图(viw):视图负责从数据库获取需要显示的信息。

  • 一个URL模式:它负责把收到的请求和你的试图函数匹配,有时候也会向视图传递一些参数。

其实前面的步骤而言,我们已经是完成了model这个模块的功能了,接下来就是做好视图的映射就可以了。

  • V(views.py)视图层

[python] view plain copy
  1. from django.shortcuts import *  
  2. from django.http import HttpResponse  
  3. from blog.models import BlogPost  
  4. from blog.views import *  
  5.   
  6. # Create your views here.  
  7.   
  8. def myBlogs(request):  
  9.     blog_list = BlogPost.objects.all()  
  10.         return render_to_response('BlogTemplate.html',{'blog_list':blog_list})  
这里面用到了模板文件,还传给了模板一个列表类型的参数。

在blog目录下建立template目录(mysite/blog/templates),创建模板文件BlogTemplate.html,它的内容如下:

[python] view plain copy
  1. {% for post in blog_list %}  
  2. <h2>{{ post.title }}</h2>  
  3. <p>{{ post.timestamp }}</p>  
  4. <p>{{ post.body }}</p>  
  5. {% endfor%}  

C(controller)urls.py

可以说这个文件将Django各部分松耦合的功能衔接到了一起,完成了整个项目的运转的非核心的核心了,是关于如何映射的逻辑的处理。

[python] view plain copy
  1. from django.conf.urls import patterns, include, url  
  2. from django.contrib import admin  
  3. from blog.views import *  
  4. #admin.autodiscover()  
  5.   
  6. urlpatterns = patterns('',  
  7.     # Examples:  
  8.     # url(r'^$', 'mysite.views.home', name='home'),  
  9.     # url(r'^blog/', include('blog.urls')),  
  10.   
  11.     url(r'^admin/', include(admin.site.urls)),  
  12.     url(r'myblog',myblog),  
  13. )  


输入http://127.0.0.1:8000/myblog,就刻印访问我们的博客系统了。这样就实现了我们博客系统打建立,但是由于没有添加样式,看起来不是很好看,所以接下来我们要添加以下模板的样式。



九,模板配置

接着刚才的继续,关于模板,这里面可谓是有着很深的设计哲学。了解过的大家肯定都会有感触,我就不多说了。 
接下来就为我们的博客系统设置一下模板吧。

父模板base.html 按照django对模板的继承设置,我们可以制作一个父模板。如下:

[html] view plain copy
  1. <!DOCTYPE html>  
  2. <html lang="zh">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>huang's blog</title>  
  6. </head>  
  7. <style type="text/css">  
  8.     body{  
  9.         color: #efd;  
  10.         background: #BBBBBB;  
  11.         padding: 12px 5em;  
  12.         margin:7px;  
  13.     }  
  14.     h1{  
  15.         padding: 2em;  
  16.         background: #675;  
  17.     }  
  18.     h2{  
  19.         color: #85F2F2;  
  20.         border-top: 1px dotted #fff;  
  21.         margin-top:2em;  
  22.     }  
  23.     p{  
  24.         margin:1em 0;  
  25.     }  
  26. </style>  
  27. <body>  
  28. <h1>Zhiyuan's博文</h1>  
  29. <h3>Talk is cheap,show me the code!</h3>  
  30. {% block content %}  
  31. {% endblock %}  
  32. </body>  
  33. </html>  


然后就是子模板BlogTemplate.html

[html] view plain copy
  1. {% extends "base.html" %}  
  2.     {% block content %}  
  3.         {% for post in blog_list %}  
  4.             <h2>{{ post.title }}</h2>  
  5.             <p>{{ post.timestamp }}</p>  
  6.             <p>{{ post.body }}</p>  
  7.         {% endfor %}  
  8.     {% endblock %}