python关于Django搭建简单博客项目(详解一)
上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答。本文没有特定顺序,请结合上一篇和源代码参照学习。
相关源代码和解析请参看:https://github.com/Cheng0829/mysite
/mysite/manage.py(Django项目里面的工具,通过它可以调用django shell和数据库等)
/mysite/mysite/settings.py(包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量)
/mysite/mysite/urls.py(负责把URL模式映射到应用程序,通俗理解就是网址)
在blog目录下的models.py是blog应用的核心文件之一,是定义blog数据结构的地方。修改models.py,新添加BlogPost类,代码如下:
from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length = 150)(长度确定)
body = models.TextField()(长度不定,可以无限)
timestamp = models.DateTimeField()
XXXField:字段类型(Field types)
BlogPost类是django.db.models.Model的一个子类 。它有变量title(blog的标题),body(blog的内容部分),timestamp(blog的发表时间)。
CharField:
class CharField(max_length=None,[**options])
CharField是一个字符串字段,对小字符串和大字符串都适用。对于更大的文本,应该使用TextField 。
但它有一个必须传入的参数:max_length,字段的最大字符数。
DateTimeField
class DateTimeField([auto_now=False, auto_now_add=False, **options])
DateTimeField利用 datetime.datetime 实例表示日期和时间。
TextField
class TextField([**options])
TextField用于处理大文本字段,理论上可无限。
接下来,先python manage.py makemigrations(简历mysite)
然后python manage.py migrate(创建SQLite数据库,数据库迁移,migrate意为迁移)
最后在根目录mysite下生成一个数据库文件db.sqllite3。
打开mysite/mysite/urls.py,写上url(r'^admin/', admin.site.urls),使此地址可以打开admin后台
urlpatterns = [
url('admin/', admin.site.urls),
url(r'^blog/$',views.blog_index,name='index'),
]
编辑mysite/mysite/settings.py,在INSTALLED_APPS列表里面添加blog应用(列表也可以用逗号结尾)
(若需要改变时区和语言,则在107,109行改代码为
LANGUAGE_CODE = 'zh-hans'(默认为en-us),TIME_ZONE = 'Asia/Shanghai'(默认为UTC))
(在setting.py第26行有DEBUG=True,故在打开某不存在页面时,显示“Page Not Found”,而不是404)
DEBUG = True
ALLOWED_HOSTS = []
若把DEBUG变量注释掉或设为False,必须在ALLOWED_HOSTS不为空, 此时打开某不存在页面,显示Sever Error 500
404:找不到文件 500:内部服务器错误
code:代码,编码
此时输入http://127.0.0.1:8000/admin/,输入刚才创建数据库时候填写的帐号就能进入admin界面
从Django的角度看,一个页面具有三个典型的组件:
1.模板(model):模板负责把传递进来的信息显示出来。
2.视图(view):视图负责从数据库获取需要显示的信息。
3.URL模式:它负责把收到的请求和你的试图函数匹配,有时候也会向视图传递一些参数。
其实前面的步骤而言,我们已经是完成了model这个模块的功能了,接下来就是做好视图的映射就可以了。
下面解析index.html:
渲染变量使用双大括号{{ }},渲染标签则使用双大括号{% %}
templates中html文件的for标签:
{% for i in blog_list %} #blog_list 为后端传递给模板的变量
<p>{{ blog.XXX }}</p> #输出blog.XXX,若把p改为h2,可把把字体加粗,然后加大到2号(数字越小字越大)
{% endfor %} #使用endfor来表示循环结束
接下来编写views.py:
from django.shortcuts import render
from blog.models import BlogsPost
def blog_index(request):
blog_list = BlogsPost.objects.all() # 从数据库获取所有该类对象,即获取所有数据
return render(request, 'index.html', {'blog_list':blog_list})
render方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。它的作用就是将数据填充进模板文件,最后把结果返回给浏览器。
修改mysite/mysite/urls.py:
其中,r’^blog/$’表示地址为127.0.0.1:8000/blog,views.blog_index是引用views中的blog_index函数,利用html文件,name =‘index’
说明利用的是index.html文件,urlpatterns是个列表。
mysite文件夹中核心文件是setting.py,这也是最复杂最难读懂的一个py文件,所以下一篇我们讲解setting.py。
相关源代码和解析请参看:https://github.com/Cheng0829/mysite
python关于Django搭建简单博客项目(详解一)的更多相关文章
- python关于Django搭建简单博客项目 详解二-setting.py
这一篇我们来讲解setting.py,具体内容以注释形式写入到下面的setting.py代码中,篇幅所限已把官方所给英文注释删除. 全部源代码和详解请参看http://github.com/Cheng ...
- python关于Django搭建简单博客项目(教程)
由于csdn各种django blog博文都有或多或少的bug,所以我决定自己写一篇,先附上教程,详解在另一篇博文里,为了便于大家复制粘贴,本文代码尽量不使用图片. 源代码及解析文章请在我的githu ...
- Django搭建简易博客
Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...
- Django搭建简易博客教程(四)-Models
原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...
- Django之BBS博客项目
一.登陆功能(验证码) from geetest import GeetestLib from django.contrib import auth #使用极验滑动验证码的登陆 def login(r ...
- 用Django搭建个人博客—(1)
业精于勤荒于嬉,形成于思毁于随. 本阶段的任务小记: 简单介绍一下Django的使用,创建项目和一个app 简单介绍一下Django的settings.py文件的相关配置 整合数据库到自己的博客系统中 ...
- Django 搭建简易博客
新增一个 APP 博客算是一个功能集,因此我们应将其体现为一个模块.这表现在 Django 应用里则是为其创建一个 APP Package.现在让 manage.py 中的 startapp 闪亮登场 ...
- 用Django搭建个人博客—(2)
今日任务: 1 blog的数据库模型定义 2 简单的注册登录功能的实现 项目的源文件已经推送到git@oschina.net. 所以,如果想要参阅源码的请移步 (Fork) http://git.os ...
- Django开发简单博客流程
什么是Django? Django是一个基于python的高级web开发框架 它能够让开发人员进行高效且快速的开发 高度集成(不用自己造轮子), 免费并且开源 当前路径创建工程 django-admi ...
随机推荐
- 使用 Liquibase 管理数据库版本 - SpringBoot 2.7 .2 实战基础
优雅哥 SpringBoot 2.7 .2 实战基础 - 05 -使用 Liquibase 管理数据库版本 在企业开发中,数据库版本管理好像是一个伪命题,大多项目都是通过 Power Designer ...
- BZOJ1787/Luogu4281: [Ahoi2008]Meet 紧急集合
画画图可知,三点\(lca\)必有两相同,\(a,b,c\)距离为\(dis_a + dis_b + dis_c - dis_{lca(a,b)} - dis_{lca(b,c)} - dis_{lc ...
- Java 在PDF中添加水印
在日常工作和学习中,PDF的普及给人们带来了极大的便利,但同时也出现了很多问题. PDF文件容易复制和传播,版权难以保护. 在海量文件中也很难区分信息,例如,你有没有打开一个文件夹,里面有这么多同名的 ...
- C++ 性能小测 1 二维数组的遍历效率
C++ 性能小测 1 二维数组的遍历效率 遍历二维数组时,常规思路是使用一个嵌套循环.一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层.另一方面,由于二维数组是按行存储 ...
- 面试突击79:Bean 作用域是啥?它有几种类型?
Spring 框架作为一个管理 Bean 的 IoC 容器,那么 Bean 自然是 Spring 中的重要资源了,那 Bean 的作用域是什么意思?又有几种类型呢?接下来我们一起来看. PS:Java ...
- Spring Boot2配置Swagger2生成API接口文档
一.Swagger2介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 及时性 (接 ...
- 采云链SRM SaaS供应商管理系统,发展型中小企业的福音
采购业务的发展遵循一些规律:采购从一开始围绕"供应商"开展,逐渐发展成围绕"货物"进行,如今围绕"供应商协同"和"采购流程管理&q ...
- 清源正本,鉴往知来,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中引用类型是否进行引用传递EP18
开篇明义,Go lang中从来就不存在所谓的"引用传递",从来就只有一种变量传递方式,那就是值传递.因为引用传递的前提是存在"引用变量",但是Go lang中从 ...
- 【Java面试】这应该是面试官最想听到的回答,Mysql如何解决幻读问题?
"Mysql如何解决幻读问题" 一个工作了4年小伙伴,去一个美团面试,遇到了这样一个问题. 大家好,我是Mic,一个工作了14年的Java程序员 关于这个问题,面试官想考察什么?我 ...
- 2021年3月-第01阶段-Linux基础-Linux系统概念-Linux命令
Linux系统基本概念 图形界面: Ctrl+Shift +号 //调整命令终端变大 Ctrl - 号 //调整命令终端变小 命令终端: ~ 家目录:用户的私有场所,其他用户不能随便访问 root超级 ...