上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答。本文没有特定顺序,请结合上一篇和源代码参照学习。

相关源代码和解析请参看: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搭建简单博客项目(详解一)的更多相关文章

  1. python关于Django搭建简单博客项目 详解二-setting.py

    这一篇我们来讲解setting.py,具体内容以注释形式写入到下面的setting.py代码中,篇幅所限已把官方所给英文注释删除. 全部源代码和详解请参看http://github.com/Cheng ...

  2. python关于Django搭建简单博客项目(教程)

    由于csdn各种django blog博文都有或多或少的bug,所以我决定自己写一篇,先附上教程,详解在另一篇博文里,为了便于大家复制粘贴,本文代码尽量不使用图片. 源代码及解析文章请在我的githu ...

  3. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  4. Django搭建简易博客教程(四)-Models

    原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...

  5. Django之BBS博客项目

    一.登陆功能(验证码) from geetest import GeetestLib from django.contrib import auth #使用极验滑动验证码的登陆 def login(r ...

  6. 用Django搭建个人博客—(1)

    业精于勤荒于嬉,形成于思毁于随. 本阶段的任务小记: 简单介绍一下Django的使用,创建项目和一个app 简单介绍一下Django的settings.py文件的相关配置 整合数据库到自己的博客系统中 ...

  7. Django 搭建简易博客

    新增一个 APP 博客算是一个功能集,因此我们应将其体现为一个模块.这表现在 Django 应用里则是为其创建一个 APP Package.现在让 manage.py 中的 startapp 闪亮登场 ...

  8. 用Django搭建个人博客—(2)

    今日任务: 1 blog的数据库模型定义 2 简单的注册登录功能的实现 项目的源文件已经推送到git@oschina.net. 所以,如果想要参阅源码的请移步 (Fork) http://git.os ...

  9. Django开发简单博客流程

    什么是Django? Django是一个基于python的高级web开发框架 它能够让开发人员进行高效且快速的开发 高度集成(不用自己造轮子), 免费并且开源 当前路径创建工程 django-admi ...

随机推荐

  1. Jenkins初始化界面一直显示Please wait while Jenkins is getting ready to work ...

    第一次访问jenkins时,会提示如下界面:  注:如果这个界面初始化的时间过长,则需要修改相关配置文件. 原因:因为访问官网太慢.我们只需要换一个源,不使用官网的源即可. 1.找到 jenkins工 ...

  2. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)

    学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...

  3. Java数据类型扩展及面试题讲解

    这是关于数据类型的面试题,还是比较重要的. 1.整数拓展: 我们肯定都或多或少知道一个问题,叫进制问题.咱们常见的电脑里的二进制,然后咱们平时生活中用的是十进制,然后咱们工作的时候还有一个十六进制跟八 ...

  4. 公网可用的RTMP、RTSP测试地址(2021年3月)

    好多博客提到的公网可测试的RTSP和RTMP URL大多都不用了,以下是大牛直播SDK(Github)于2021年3月亲测可用的几个URL,有其他可用的URL,也欢迎大家在评论区回复. RTMP流地址 ...

  5. KingbaseES 表空间加密-透明加密

    透明存储加密是指数据在写到磁盘上时对其进行加密,当授权用户重新读取数据时再对其进行解密.加密解密过程对用户都是透明的,无需对应用程序进行修改,授权用户甚至不会注意到数据已经在存储介质上加密.当前的透明 ...

  6. gem5 使用记录,对例子中helloobject的理解

    gem5中有一个 hello的例子,不是hello world那个,在src/learning-gem5/part2里面,这是虽然是个简单的例子但包含的要素挺多挺全. 整个结构是src下面有一个hel ...

  7. Java 流处理之收集器

    Java 流(Stream)处理操作完成之后,我们可以收集这个流中的元素,使之汇聚成一个最终结果.这个结果可以是一个对象,也可以是一个集合,甚至可以是一个基本类型数据. 以记录 Record 为例: ...

  8. ConcurrentDictionary<T,V> 的这两个操作不是原子性的

    好久不见,马甲哥封闭居家半个月,记录之前遇到的一件小事. ConcurrentDictionary<TKey,TValue>绝大部分api都是线程安全且原子性的, 唯二的例外是接收工厂委托 ...

  9. 《Spatial-Spectral T ransformer for Hyperspectral Image Classification》论文笔记

    论文题目<Spatial-Spectral T ransformer for Hyperspectral Image Classification> 论文作者:Xin He 1 , Yus ...

  10. 手把手教你使用LabVIEW人工智能视觉工具包快速实现图像读取与采集(含源码)

    目录 前言 一.工具包位置 二.图像采集与色彩空间转换 1.文件读写 2.实现图片读取 3.使用算子cvtColor实现颜色空间转换 三.从摄像头采集图像 1.Camera类 2.属性节点 3.实现摄 ...