Python学习——用Django建立一个博客

关于Django建立博客的教程很多,本文参考慕课网的教学视频:Django入门与实践 创建了一个博客。

软件:Python 3.6 , Django 1.11.5
电脑:win7 64位
开发环境:Pycharm

创建具体步骤如下:

1、创建一个app应用

在本地创建一个名为blog的文件,在cmd命令中定位到该文件所在目录。

首先启动服务,此时可以得到一个本地地址:127.0.0.1:8000

python manage.py runserver

然后创建名为 myblog 的应用:

python manage.py startapp myblog

此时便会在blog目录下多一个名为“myblog”的包,也就是我们创建的app项目。

TIPS:要查看所有的命令,可以在cmd中直接输入 python manage.py 进行查看。

2、创建博客首页

博客首页用来展示博客的所有文章,以文章标题的形式展现出来,因此首先需要创建一个数据库用来存储所有的文章,然后创建一个html模板,将其在前端表现出来。

2.1 创建数据库
在myblog下的models.py中,创建名为Article的数据库,代码如下:

class Article(models.Model):
    title = models.CharField(max_length=32, null=True)
    content = models.TextField(null=True)
    creat_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

def str(self):
return self.title
函数是为了将文章的标题打印在电脑屏幕上。

创建好后,需要再次进入cmd中,依次执行以下两条命令将数据库关联上:

python manage.py makemigrations
python manage.py migrate

2.2 在视图函数中创建函数

from . import models

def index(request):
    articles = models.Article.objects.all()
    return render(request, 'index.html', {'articles':articles})

需要将models导入进来,“.”的意思是从本包中导入

2.3 创建“index.html”模板
首先需要在myblog目录下创建一个名为“templates”的文件夹;
然后在该文件建中创建一个“index.html”文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>博客首页</title>
</head>
<body>
<h1>博客首页</h1>
<h3><a href="#">写博客</a></h3>
<ul>
    {% for article in articles %}
    <li>
        <span><a href="#">{{ article.title }}</a></span>
        <span>发布时间:{{ article.creat_time }}</span>
    </li>
    {% endfor %}
</ul>
<p>共有博客数目:{{ articles|length }}</p>
</body>
</html>

{{ articles|length }},这段代码用了装饰器的知识,可以将统计articles列表中的元素数目,也就得到了文章的数目。

2.4 通过url将前后端连接到一起
有两个urls.py,一个在blog目录下;另一个需要在myblog目录下创建。
第一个urls.py,通过include指向到第二个:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^myblog/', include('myblog.urls', namespace='myblog')),
]

第二个urls.py,指向视图函数:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^index/', views.index),
]

如此,便得到了博客首页。
运行:python manage.py runserver
输入:127.0.0.1:8000/myblog/index/ 便可得到博客首页,如下图所示:

这里写图片描述

3、创建博客具体内容
目标:当点开首页的博客文章标题时,可以进入文章页面中,显示文章具体内容。

创建方式同首页类似,首先建立一个视图函数,然后创建模板,在通过url将其关联起来。需要注意的是,这里通过article_id,索取到文章id,并传递给视图函数,然后视图函数将对应的文章从数据库中找到,在传给html模板,展示出来。

代码如下:
view.py

def article(request,article_id):
    article = models.Article.objects.get(pk=article_id)
    return render(request, 'article.html', {'article':article})

templates下新建一个article.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>博客文章</title>
</head>
<body>
<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
<hr>
<a href="#">修改文章</a>
</body>
</html>

myblog下的urls.py

urlpatterns = [
    url(r'^index/', views.index),
    url(r'^article/(?P<article_id>[0-9]+)/$', views.article, name='article'),
]

此时,需要将index.html中的文章标题链接加上:

<span><a href="{% url 'myblog:article' article.id %}">{{ article.title }}</a></span>

点击首页的博客标题”我的第一篇博客“,可以进入如下页面:

这里写图片描述

4、创建新的博客
创建方法同上。注意点:写完博客后,通过post方法提交,此时需要在建立一个视图函数将数据写入数据库中。

views.py:edit函数为新建博客的函数,submit函数为点击提交按钮后运行的函数。

def edit(request):
    return render(request, 'edit.html')

def submit(request):
    title = request.POST.get('title')
    content = request.POST.get('content')
    models.Article.objects.create(title=title, content=content)
    return HttpResponseRedirect('/myblog/index')

templates下新建一个edit.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑文章</title>
</head>
<body>
<form action="{% url 'myblog:submit' %}" method="post">
    {% csrf_token %}
    <lable>文章标题</lable>
    <input type="text" name="title">
    <br>
    <lable>文章内容</lable>
    <input type="text" name="content">
    <br>
    <input type="submit" value='提交'>
</form>
</body>
</html>

注意:需要添加{% csrf_token %},目的是为了防止跨站访问xxxx之类的(不懂),反正不加这句话的话会出错。

myblog下的urls.py:

urlpatterns = [
    url(r'^index/', views.index),
    url(r'^article/(?P<article_id>[0-9]+)/$', views.article, name='article'),
    url(r'^edit/', views.edit,name='edit'),
    url(r'^submit/', views.submit,name='submit'),

]

在index.html中,将”写博客“的超链接加上:

<h3><a href="{% url 'myblog:edit' %}">写博客</a></h3>

点击博客首页的”写博客“,写完后,点击提交,即可。

5、修改博客
在点击博客首页的标题后,进入博客正文页面,下面有个”修改博客“按钮。目的是为了对之前写的博客进行编辑,当点击时,进入的是与写博客一样的界面,但是文本框中应该存在之前博客的内容,当修改完点击提交后,应该覆盖原来的内容。

因此,点击修改博客,会导入该篇博客的内容,即存在参数的传递,通过article_id将该博客的id通过url传到后台,因此当修改博客是,传递article_id = article.id ,当新建博客时,传递article_id = 0.

因此,对之前的urls.py进行修改:

urlpatterns = [
    url(r'^index/', views.index),
    url(r'^article/(?P<article_id>[0-9]+)/$', views.article, name='article'),
    url(r'^edit/(?P<article_id>[0-9]+)/$', views.edit,name='edit'),
    url(r'^submit/', views.submit,name='submit'),

]

并修改index.html中的:

<h3><a href="{% url 'myblog:edit' 0 %}">写博客</a></h3>

修改article.html中的:

<a href="{% url 'myblog:edit' article.id %}">修改文章</a>

修改views.py中的edit函数:

def edit(request,article_id):
    if str(article_id) == "0":
        return render(request, 'edit.html')
    article = models.Article.objects.get(pk=article_id)
    return render(request, 'edit.html', {'article':article})

修改edit.html模板文件:

<form action="{% url 'myblog:submit' %}" method="post">
    {% csrf_token %}
    <input type="hidden" name="article_id" value="{{ article.id|default:'0' }}">
    <lable>文章标题</lable>
    <input type="text" name="title" value="{{ article.title }}">
    <br>
    <lable>文章内容</lable>
    <input type="text" name="content" value="{{ article.content }}">
    <br>
    <input type="submit" value='提交'>
</form>

点击提交后,通过<input type="hidden" name="article_id" value="{{ article.id|default:'0' }}"> 进行传参,将文章id传到视图函数中的submit函数中,函数修改如下:

def submit(request):
    title = request.POST.get('title')
    content = request.POST.get('content')
    article_id = request.POST.get('article_id')
    if str(article_id) == '0':
        models.Article.objects.create(title=title, content=content)
        return HttpResponseRedirect('/myblog/index')
    article = models.Article.objects.get(pk=article_id)
    article.title = title
    article.content = content
    article.save()
    return render(request, 'article.html', {'article':article})

如此,最终完成博客的创建。

TIPS:有一点不完美的是,在修改完博客后,跳转到当前博客内容下,但是地址栏链接变了,这个问题回头再找下解决办法。

6、Admin查看后台数据
Django中很好的一个东西是Admin函数,可以查看后台数据:

Admin.py:

from django.contrib import admin
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'content','creat_time')
    list_filter = ('creat_time',)

admin.site.register(Article, ArticleAdmin)

并将setting.py中的语言改为汉语:

LANGUAGE_CODE = 'zh-Hans'

在cmd中创建管理员用户:

python manage.py createsuperuser

输入用户名、邮箱、密码、确认密码即可。
进入127.0.0.1:8000/admin
输入管理员账号,密码即可管理后台了。很方便,很直观。

最后,本文创建的博客并没有经过css优化,html文件也很垃圾,后期可以进行美化。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值