Python入门 使用Django搭建一个简单的博客系统MTV流程


概述

出于简单学习Python的目的,搞完之后留点纪念,方便review,避免遗忘,此文需要一定的Linux基础,以及任一一门编程语言基础,懂基本语法,易于理解,实际上也是非常小的项目

M是model模型,T是templates界面,V是Views逻辑

系统环境与配置

本人环境:Mac 10.13.2

Python版本:2.7.10

工具:VS Code

 

Django的安装:2.7.10支持的最新版为:Django-1.11.8 不要下到Python3的版本了,官网上仔细看

从官网得到一个tar包,解压,安装好Python并配置好环境后进入解压的文件夹,执行:

sudo python setup.py. install

Python 默认在 /Library/Python/2.7 中,那么无论如何你在哪里安装完 DJango,都会在 /Library/Python/2.7/site-packages 中生成一个 django 的文件夹。如果要删除 django,只需要把该目录下的 django 文件夹删除即可。

参考:https://cnbin.github.io/blog/2015/05/29/mac-da-jian-djangokai-fa-huan-jing/

开始项目

安装好django后,就可以开始工作了,新建一个文件夹,使用终端切换到该文件夹。执行以下命令

django-admin startproject blogs

此时会生成一个文件夹,里面会有一些文件,这就是一个基础项目(如果没有,请检查路径下是否有中文)

使用VS Code打开该文件夹,最外面有一个manage.py,此时可以利用此文件进行项目启动,启动命令如下

python ./manage.py runserver

image.png

当然,你可以尝试访问下,会提示it worked

新建一个app

这个app,可以理解为项目下的一个应用

python ./manage.py startapp blog

然后你会发现变成了这样

image.png

当然,都不会是空的,接下来编写响应函数

啥是响应函数呢?怎么说呢,类似于J2EE中的一个Action,是用户与后台交互的一个响应点

在你的应用,也就是blog这个app中找到views.py

from django.http import HttpResponse #导包
# Create your views here.
def index(request):
    return HttpResponse("project blogs app blog")
#这里一定要缩进,有点像作用域,java中用{}区分

意思是定义一个访问点index,然后返回字符串数据 project blogs app blog

接下来配置url使其可以访问到该访问点,进入blogs文件夹,打开urls.py

from blog.views import index #导包
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/$',index), #这行是新添加的,上面是默认的 ^是代表开始,$代表结束,其他的仿造上面一行,第二个参数为访问的方法,为views中定义的index
]

然后安装app,在blogs中的settings.py中的,添加上你的app名称

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog' #新加的
]

然后运行,就可以看到你写的返回的文字了

python ./manage.py runserver

这时候刷新之前的127.0.0.1:8000是会404的,但是这个404界面挺美的,原因是django的默认设置,你需要自己加上blog,输入127.0.0.1:8000/blog,你就得到了你要的结果了

页面响应

在你的app blog中新建文件夹static 存放你的css,js,img等资源文件

新建一个templates,用于存放你的html

这两个文件夹是Django默认的,不能错,html中资源文件的引用需要修正,接着修改views.py

将return改为

return render(request,"blog.html")

记得去掉之前的return,然后运行项目,你就可以看到你的页面了

配置后台

python ./manage.py migrate

这条命令为,初始化数据库,接着创建一个超级账户

python ./manage.py createsuperuser

按提示输入名称与密码,密码与Linux密码一样,输入了不会显示,按回车即可

在你之前的地址上把blog换成/admin就能登录啦,去看看吧

image.png

 

是不是觉得特别方便,直接就可以修改后台数据库

添加自己的模型

打开你的app中的models.py,改成这样

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models

# Create your models here.缩进不能忘记,否则会有错
class Blog(models.Model):
    title = models.CharField(max_length=64) #指最长只能64字节
    content = models.TextField() #文章内容可以非常多,所以用TextField
    #还有其他很多中Field可以查下资料
    
    #这是定义你的model内存条目的标题,"".format用于格式化字符串,3个{}代表3个参数
    第一个是直接取的title,self指其本身,第二个是长度,第三个是截取18个,:前面没写是指从0到18
    def __unicode__(self):
        return "标题:{},字数:{}字,概要:{}......".format(self.title,len(self.content),self.content[:18])

生成你自己的model,这里只是写完了,运行命令:

./manage.py makemigrations

接着执行

python ./manage.py migrate

将我们自己写的model映射为数据库,运行

python ./manage.py runserver

但是你访问管理界面会发现,并看不到变化,因为还需要配置admin.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib import admin
from blog.models import Blog

# Register your models here.
admin.site.register(Blog)

对比下你就知道作用了,就是注册你的model,再访问管理界面时,你就可以看到了

image.png

现在你可以进入Blogs中,点add,进行添加文章标题与内容,超级方便有没有

配置markdown

安装Python库:pip install markdown

修改views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponse
from blog.models import Blog
import markdown

# Create your views here.
def index(request):
    #上面导包后直接调用Blog.objects.all()返回的是list,你blogs这个model数据库中所有的数据条目.first()是取第一条
    blog =Blog.objects.all().first()
    #使用markdown库进行解析为html
    blog_content =markdown.markdown(blog.content)
    #区别:加入了第三个参数,其为键值对,可以传对象也可以是内容
    return render(request,"blog.html",{'blog':blog,"blog_content":blog_content})
# return HttpResponse("project blogs app blog")

接着修改你的html,在你需要的地方修改并获取数据

{{双层是Django的模板}},中间的内容就是对象属性等

<h1 class="ui header">{{ blog.title }}</h1>
<p>{{ blog_content | safe }}</p>

这里的safe属性是过滤放行,不加则会显示原始html,不会被解析为html

运行服务器,你就可以看到你想要的效果了,我的如下

最后的效果image.png

image.png

image.pngimage.png

结束语

小小身体,大大能量,语法简介库强大,人生苦短,独立开发,早用Python

 

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - Python入门 使用Django搭建一个简单的博客系统MTV流程


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.