django搭建blog

本文详细介绍了如何使用Django在Windows环境下搭建一个简单的个人博客应用,包括创建项目、模型、视图、URL和模板等内容,以及如何利用Django的内置功能实现可视化访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        虽然已经接触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:14
Django 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.

在浏览器中输入提示信息中的url,可以得到下面的网页




创建应用的模型

django的应用模型的作用是实现数据库与程序对象之间的交互,其本质为python中的ORM(对象关系映射)。创建应用的模型,只需要编辑blog文件夹下的“model.py”文件。在model.py文件中添加如下代码
from django.db import models


class 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 syncdb
Operations to perform:
  Apply all migrations: admin, contenttypes, auth, sessions
Running 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, sessions
Running 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, Context
from django.http import HttpResponse
from blog.models import BlogPost


def 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 archive

urlpatterns = 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 %}

重新访问公共页面,可以看到显示效果有了很大提升。









### 使用Django构建博客网站教程 #### 配置项目结构 为了创建一个功能齐全的博客站点,首先需要初始化一个新的Django项目并设置适当的应用程序。通常情况下,在`settings.py`文件内指定模板路径是必要的操作之一: ```python TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'blog/templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] ``` 此段代码定义了用于渲染HTML页面的模板引擎以及其搜索位置[^1]。 #### 创建应用模块 接着应该通过命令行工具来新增名为`blog`的应用组件,这一步骤会自动生成所需的目录结构和支持文件。之后可以在该应用程序下开发具体的功能特性,比如文章发布、评论管理等。 #### 处理静态资源 对于任何Web应用程序而言,处理好CSS样式表、JavaScript脚本和其他媒体资产都是至关重要的。在Django中可以通过调整`settings.py`中的STATIC_URL和STATICFILES_DIRS变量来进行相应的设定。 #### 实现视图逻辑 编写视图函数用来响应HTTP请求,并返回给定的数据或呈现特定的网页内容。利用类基底视图可以简化这一过程,同时保持良好的可维护性和扩展性。 #### 定义URL路由 最后要做的就是建立清晰合理的URL模式映射关系,使得每一个访问链接都能准确无误地指向预期的目标视图。这有助于提高用户体验并且便于搜索引擎抓取索引。 ```python from django.urls import path from .views import BlogListView, PostDetailView urlpatterns = [ path('', BlogListView.as_view(), name='home'), path('post/<int:pk>/', PostDetailView.as_view(), name='post_detail') ] ``` 上述示例展示了两个基本的URL配置项,分别对应于首页列表展示和个人日志详情页显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值