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文件也很垃圾,后期可以进行美化。
- Python学习——用Django建立一个博客
- Django开发博客(四)——建立文章列表
- python——使用django打造个人博客(1)
- Django 基础博客的建立
- Django博客开发(十三)—一个简单的站内搜索
- Python学习——Django中的url
- 用Python和Django实现多用户博客系统——UUBlog
- 用Python和Django实现多用户博客系统(二)——UUBlog
- 推荐一个学习python.Django的网站
- python+django 博客
- 用Django写博客(二)建立管理后台
- Django学习(二)——实现个人博客网站
- Django学习笔记--第一天--搭建一个简易博客
- django 搭建博客学习
- django 第一个项目-学习搭建博客 (一、建立工程)
- Python日记——用Django做一个简易的知乎日报API
- 建立博客,方便学习
- Django入门——建立项目
- flower?
- rpc 之序列化
- ngrok后台运行
- CentOS7 LVM扩容
- 优先队列的使用方法(自定义排序)
- Python学习——用Django建立一个博客
- Node.js调用模块
- 某 APP 跑步模块性能测试
- 新建动态web工程报错
- effective c++读书笔记(七)
- 算法导论c++ 堆排序以堆类结构完整实现
- java基础多目运算符是什么
- 常用工具汇总
- Linux 基础操作(三)————vim进阶使用、输出及管理输出、管道、建立用户或用户组