您的位置:首页 > 编程语言 > Go语言

Django架设blog步骤

2015-09-08 16:33 399 查看
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
最近在研究Python,起初是因为想做个爬虫,昨天看了点基础教程,台湾辅仁大学的视频,了解了python的语法规范及语言特性,主要有三:

1.动态脚本语言;

2.语法简洁,强制缩进;

3.应用广泛,web、系统管理、脚本、科学计算等等,第三方应用多;

下面开始正文,Django是Python时间中数一数二的web框架,由3个小伙创建,名字来源于一个吉他手(看3人的照片,叛逆青年类型,取这个名也就不奇怪了)。

Django的最大优点就是可以快速建立一个web应用,语法简洁,及其轻量,甚至内含一个web容器;也是基于MVC理念,更准确的说法是MTC。

以下是今天使用Django建立一个blog应用的步骤,走了一点弯路,记录下来备查:

(一)安装

1.安装Python

官网下载windows安装板,3.4.3;安装到D:\Python34

2.安装Django

官网下载1.8.7,zip包,解压到D:\Python34\Django-1.8.4

cd D:\Python34\Django-1.8.4

python setup.py install

自动安装到D:\Python34\Lib\site-packages\Django-1.8.4-py3.4.egg\django

3.创建一个项目

在D:\Python34\Lib\site-packages\Django-1.8.4-py3.4.egg\django\bin目录下,执行 Python-admin.py startproject mysite1 (如果事mac osx,则应为django-admin)

执行完后,自动生成一个mysite1目录,其下有mysite1目录和manage.py文件。

4.启动服务器

manage.py runserver

启动浏览器,检验一下,访问 http://localhost:80000,正常。
5.建立blog应用

manage.py startapp blog

命令执行后,在D:\Python34\Lib\site-packages\Django-1.8.4-py3.4.egg\django\mysite1\ 下生成一个blog文件夹

(1)编辑model

其下的models.py是定义blog数据结构的地方,打开编辑

from django.db import models
from django.contrib import admin

# Create your models here.

class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
timestamp = models.DateTimeField()
# def __init__(self, arg):
# super(BlogPost, self).__init__()
# self.arg = arg

admin.site.register(BlogPost)


title、body、timestamp是Blog的主体,类似于java中的hibernate,ORM。

最后一行是想admin模块注册,暂时可无视。

(2)安装模块

blog模块需要让mysite1项目知晓,编辑在D:\Python34\Lib\site-packages\Django-1.8.4-py3.4.egg\django\mysite1\mysite1\setting.py文件

# Application definition

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
)


第10行为新加

(3)同步数据

新加了blog模块,并定义了model,需要同步一下数据

执行 manage.py syncdb

提示

Operations to perform:
Synchronize unmigrated apps: messages, staticfiles
Apply all migrations: admin, sessions, contenttypes, auth
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
No migrations to apply.
Your models have changes that are not yet reflected in a migration, and so won
't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage
.py migrate' to apply them.


按照最后一行提示,执行 manage.py makemigrations,执行manage.py,生成blog_blogpost数据表。否则会提示 no such table: blog_blogpost 等。

Django支持多种数据库,SQLlite,mysql,MySQL,PostgreSQL,Oracle,MSSQL等,默认为SQLlite,可以看到项目目录下又有个db.sqllite3,就是默认数据库;

如果要使用mysql等可以设置D:\Python34\Lib\site-packages\Django-1.8.4-py3.4.egg\django\mysite1\mysite1\setting.py文件

1 DATABASES = {

2 'default': {

3 'ENGINE': 'django.db.backends.mysql',

4 'NAME': 'blog',

5 'USER':'root',

6 'PASSWORD':'123456',

7 'HOST':'',

8 'PORT':'',

9 }

(6)设置url

编辑在D:\Python34\Lib\site-packages\Django-1.8.4-py3.4.egg\django\mysite1\mysite1\url.py文件,自带的如下,不知道为什么不好使

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^blog/',include(blog.urls)),
]


百度后,替换为;

from django.conf.urls import patterns, include, url
#from django.contrib import admin
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^mysite/', include('mysite.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)


重新启动服务器,访问http://localhost:8000/admin,出现如下界面,

点击blogpost后的+号,提示如下页面,如果不改上面的setting文件报错 ;如 No module named 'blog.urls'等。

(7)完善一下

显示blog的题目和提交时间

编辑D:\Python34\Lib\site-packages\Django-1.8.4-py3.4.egg\django\mysite1\blog\model.py

from django.db import models
from django.contrib import admin

# Create your models here.

class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
timestamp = models.DateTimeField()
# def __init__(self, arg):
# super(BlogPost, self).__init__()
# self.arg = arg
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp')
admin.site.register(BlogPost,BlogPostAdmin)


最后几行为新加。

(8)blog前端页面

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

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

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

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

1.创建模板

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

{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor%}


2.创建一个视图函数

在app应用的目录下的view.py添加视图函数

from django.shortcuts import render
from django.template import loader,Context
from django.http import HttpResponse
from blog.models import BlogPost
# Create your views here.
def archive(request):
posts = BlogPost.objects.all()
t = loader.get_template("archive.html")
c = Context({'posts':posts})
return HttpResponse(t.render(c))


posts = BlogPost.objects.all() :获取数据库里面所拥有BlogPost对象

t = loader.get_template("archive.html"):加载模板

c = Context({'posts':posts}):模板的渲染的数据是有一个字典类的对象Context提供,这里的是一对键值对

3.创建一个URL模式

第一步,编辑mysite1/urls.py

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


此处一定要注意,include中需要单引号,否则报错。

第二步,创建并编辑mysite1/blog/urls.py

from django.conf.urls import *
from blog.views import archive
urlpatterns = patterns('',url(r'^$',archive),)


浏览器访问,看是否正常

4.前端页面润色

1,模板的精确定位

在mysite/blog/templates目录里创建一个叫base.html的模板

<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>my blog</h1>
{% block content %}
{% endblock %}
</body>
</html>


2,修改archive.html模板,让它引用base.html模板和它的“content”块。

{% extends "base.html" %}
{% block content %}
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp | date:"1,F jS"}}</p>
<p>{{ post.body }}</p>
{% endfor %}
{% endblock %}


刷新浏览器可以看到效果如下:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: