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

来源:互联网 发布:单片机pc地址 编辑:程序博客网 时间:2024/06/06 04:47

关于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 modelsdef 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 urlfrom . import viewsurlpatterns = [    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 adminfrom .models import Articleclass 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文件也很垃圾,后期可以进行美化。

原创粉丝点击