django搭建blog
来源:互联网 发布:wampserver mac版 编辑:程序博客网 时间:2024/05/16 11:32
虽然已经接触python好几个月了,但是始终没有用python开发过什么具体的应用。编程语言这东西本来就是一个应用的工具,不经常使用,很难有深刻的认识。之前一直在网络上看到对django的各种赞誉,而且早就下载了相关资料准备学习学习,但空有一颗上进的心却一直没有下定决心着手学习。国庆几天在家待着没什么事,终于下定决心要整django了。下面将通过实际操作,介绍一下如何使用django快速搭建一个blog。
网络上的好多资料都是针对linux系统介绍django搭建的,而且django的版本也五花八门,而且搭建的方法也分为命令行搭建和IDE搭建两种。不同环境不同版本搭建django web服务的操作还是略有不同的。下面的步骤将附带介绍作者搭建过程中遇到的困难,以及最终的解决方法。现在的好多IDE,比如pycharm,功能相当强大。使用pycharm搭建django服务可以省去好多简单繁琐的操作。笔者下面的操作主要针对在win 8下使用pycharm搭建1.7版本的django服务。
创建项目
打开pycharm,选择“new project”,在出现的如下窗口中点击Django后面的箭头。在新的窗口中填写项目的名字,以及应用的名字,比如作者填写的应用名字为blog。然后点击create,创建一个 项目。
创建完成后,对应的路径下将创建许多文件,红框内的文件为后续添加,暂时不用理会
其中lsc_site文件夹(名字有工程名字相同)下的文件为项目配置相关的一些文件,blog文件夹(名字与应用名字相同)下的文件为应用相关的文件。templates文件夹存放视图的模板,manage.py为管理工程的文件,后续的使用频率相当高。注意,如果不是使用IDE创建的django工程,路径下的应用相关的文件夹,以及templates文件夹都需要自己手动创建。
在命令行窗口执行如下命令,验证工程是否创建成功,正常情况下会输出如下的提示信息。
D:\lsc\study\python code\lsc_site>python manage.py runserver # 注意执行命令的目录
Run 'python manage.py migrate' to apply them.October 04, 2015 - 12:10:14Django version 1.7.10, using settings 'lsc_site.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.
创建应用的模型
django的应用模型的作用是实现数据库与程序对象之间的交互,其本质为python中的ORM(对象关系映射)。创建应用的模型,只需要编辑blog文件夹下的“model.py”文件。在model.py文件中添加如下代码
from django.db import modelsclass BlogPost(models.Model): # 应用的模型类为Model的子类,对应数据库中的一张表的模型 title = models.CharField(max_length=150) # 给表添加一个标题属性,类型为char,最长长度为150字节 body = models.TextField() # 给表添加一个文本内容的属性,类型为text timestamp = models.DateField() # 给表添加一个timestamp属性,记录贴子最后编辑的时间
为了将应用添加到服务中,需要修改setting.py中的配置,在INSTALLED_APPS的最后一行添加blog应用。
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog',)
D:\lsc\study\python code\lsc_site>python manage.py syncdbOperations to perform: Apply all migrations: admin, contenttypes, auth, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying sessions.0001_initial... OK
很奇怪,为什么没有创建blog的数据库表呢?这个问题作者当时也非常纳闷。最后在一篇网络文章中发现,在django1.7及之后的版本中,为了将对新的应用创建数据库的表,需要执行makemigrations和migrate两步操作。其中makemigrations的作用是产生数据库更新的sql文件,migrate则是真正的将应用的表添加到数据库中。
D:\lsc\study\python code\lsc_site>python manage.py makemigrations # 这一步会在migrations文件夹中新增一个xxx_initial.py文件,用于创建数据库表Migrations for 'blog': 0001_initial.py: - Create model BlogPost
D:\lsc\study\python code\lsc_site>python manage.py migrate # 向数据库中添加blog这张表Operations to perform: Apply all migrations: admin, blog, contenttypes, auth, sessionsRunning migrations: Applying blog.0001_initial... OK
创建完blog应用的数据库表之后,只有重新运行web服务,就可以在控制台对blog应用进行访问和操作了,具体的操作方法参考这篇文章。
我们开发的web应用自然是面向一般的用户的,因此不可能只允许用户在控制台界面访问服务,需要一种可视化的应用服务方法。使用django自带的admin应用就能够非常方便地实现可视化界面下访问我们自定义的应用。我们只需要在model.py中进行如下两处修改即可:
<p>from django.contrib import admin # 导入admin模块</p><p>class BlogPost...</p><p>...</p><p>admin.site.register(BlogPost)</p>
runserver后,我们就可以通过ie浏览器访问我们的应用了。点进去之后,可以操作一下创建和删除帖子。
进去之后,新增两个帖子,发现帖子无法显示标题和时间戳。这是因为没有设置应用的显示方式。
在models.py文件中新建如下 的类
class BlogPostAdmin(admin.ModelAdmin): list_display = ('title', 'timestamp')
并且注册该类
admin.site.register(BlogPost, <span style="color:#ff0000;">BlogPostAdmin</span>)
重新启动服务后,就可以正常显示标题和时间了。
创建Bolg的公共部分
上面提到的视图是管理员界面,那么如何定义给一般用户浏览的网页呢?这涉及到3个部分------模板,视图,URL。在templates文件夹下新建一个archive.html文件,添加如下内容:
{% for post in posts %} <h2>{{ post.title }}</h2> <p>{{ post.timestamp }}</p> <p>{{ post.body }}</p>{% endfor%}
在view.py中添加如下内容
from django.template import loader, Contextfrom django.http import HttpResponsefrom blog.models import BlogPostdef archive(request): posts = BlogPost.objects.all() # 获取所有的帖子 t = loader.get_template('archive.html') # 在模板路径下,找到 <span style="font-family: Arial, Helvetica, sans-serif;">archive.html文件作为视图模板</span> c = Context({'posts': posts}) # 将帖子封装成一个上下文对象 return HttpResponse(t.render(c)) # 返回http响应
上面提到的模板路径是在setting文件的末尾定义的,如下所示。低版本的django中,模板路径可能有所不同,需要根据真实的路径进行填写。
TEMPLATE_DIRS = ( os.path.join(BASE_DIR, 'templates'),)
那么web服务是如何将url跟视图进行关联的呢?答案是在mysite文件夹下的urls.py文件中新添加一条url映射
admin.autodiscover()urlpatterns = patterns('', url(r'^blog/', include('blog.urls')), # 以blog开始的url,使用blog.urls文件中定义的方式关联视图 url(r'^admin/', include(admin.site.urls)),)
blog文件夹下新建一个urls.py文件,添加如下内容
from django.conf.urls import *from blog.views import archiveurlpatterns = patterns('', url(r'^$', archive), # 对于所有的url,调用views.py中的archive方法返回html文件给用户 )
至此,已经可以通过url访问blog的公共页面,如下所示。注意url是端口号之后直接跟着blog。刚开始作者在端口号和blog之间加了admin,结果一直出不来公共页面,还以为代码添加错误了。
模板的润色
上面的模板只是改了一下字体的大小,非常简单。可以通过模板的基类对html模板进行润色。具体的修改方法为,在tempaltes文件夹下创建一个base.html文件(base.html模板是从这里copy过来的,作者对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>XXXblog</h1> <h3>好好学习,天天向上</h3> {% block content %} {% endblock %} </body></html>
然后修改archive.html文件,使其继承base文件
{% 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 %}
重新访问公共页面,可以看到显示效果有了很大提升。
0 0
- Django 搭建blog
- django 快速搭建blog
- django 快速搭建blog
- django搭建blog
- django 快速搭建blog
- django 快速搭建blog
- django 快速搭建blog
- django 快速搭建blog
- Django快速搭建Blog
- django 快速搭建blog
- django 快速搭建blog
- django 快速搭建blog
- django 快速搭建blog
- pycharm+django搭建简单blog
- Django 搭建的简易blog
- python django 快速搭建blog
- django快速搭建简单blog
- django快速搭建blog系统
- dede 常用网站开发标签
- 集合视图UICollectionView
- 软件工程文档总结
- BIOS入门之我见-预热
- iOS_NSAttributeString
- django搭建blog
- MSCOMCTL.OCX文件缺失问题
- ssoj2427: 学数数(RMQ)
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- JdbcTemplate查询(Spring框架中的工具类)
- BIOS入门之我见-布局
- SSH三大框架的工作原理及流程
- Swift学习笔记11——方法(Method)
- Ubuntu五笔输入法