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

- 目录名称不建议修改
- Wsgi.py python服务器网关接口(python应用与web服务器之间的接口)
- Urls.py Django项目中所有地址(页面)都需要自己去配置URL
- Settings.py 数据库等等配置
- __init_模块化,可以导入
创建应用:
- 打开命令行,进入项目中manage.py同级目录
- 命令行输入: python manage.py startapp blog
- 添加应用名到settings.py中的Insalled_APPS里

- migrations数据移植(迁移)模块
- admin.py :该应用的后台管理系统配置(Django自带的后台管理系统)
- apps.py :当前应用的一些配置,Django-1.9以后自动生成
- models.py : 数据模块,使用了ORM框架.类似于MVC结构中的Models(模型)
- views.py :执行相应的代码所在模块,代码逻辑处理的主要地点,项目中的大部分代码均这里编写
代码开始
项目中第二种URl配置
- 在根urls.py中引入include
- 在App目录下创建urls.py文件,格式与根urls.py相同
- 根urls.py中url函数第二个参数改为include(‘blog.urls’)
- 根urls.py针对App配置的URL名称,是该App所有URL的总路径
- 配置url时注意正则表达式结尾符号$和/
Templates介绍:
- Templates就是存放HTMl文件
- 使用了Django模板语言(Django Template Language, DTL)
- 可以使用第三方模板(如jinja2)
在哪里修改:
- Setting中的TEMPLATES 中BACKEND 值
开发第一个Template
- 在app的根目录下创建名叫Templates的目录
- 在该目录下创建html文件
- 在views里渲染给浏览器 render
return render(request, "index.html")
- Render()的第三个参数 支持一个dict类型参数
- 该字典是后台传递到模板的参数,键为参数名
- 在模板中使用{{参数名}}来直接使用
Django 查找Template
- Django按照INSTALLED_APP中添加的顺序查找Templates
- 不同APP下Templates目录中的同名.html文件会造成冲突
解决TemplatesTemplates冲突方案
- 在APP的Templates目录下创建以APP名为名称的目录
- 将html文件放入新建的目录下
Models的介绍
- 通常,一个Model对应数据库的一张数据表
- Django中Models以类的形式表现
- 包含了一些基本字段以及数据的一些行为
ORM
- 对象关系映射(Object Relation Mapping)
- 实现了对象和数据库之间的映射
- 隐藏了数据访问的细节,不需要编写SQL语句
编写Models步骤:
- 在应用根目录下创建models.py, 并引入models模块
- 创建类继承models.Model,该类即是一张数据表
- 在类中创建字段
字段创建:
- 字段即类里面的属性(变量)
- Attr = models.CharField(max_length=64)
参数介绍等可以来这里查看
https://docs.djangoproject.com/en/1.10/ref/models/fields/
生成数据表:步骤
- 命令行中进入manage.py统计目录
- 执行python manage.py makemigrations app名(可选)
- 在执行python manage.py migrate
查看:
- Django会自动在app/migrations/目录下生成移植文件
- 执行python manage.py sqlmigrate 应用名 文件id 查看SQL语句(python manage.py sqlmigrate blog 0001)
- 默认sqlite3的数据库在项目根目录下db.sqlite3
查看并编辑db.sqlite3
- 使用第三方软件,SQLite Expert Personal 轻量级,完全免费
- 关联数据 在sqlite3安装的路径下执行命令 要不然不能直接打开数据库
- sqlite3.exe D:\pycharm\imooc\myblog\db.sqlite3
- 然后在双击打开db.sqlite3
后台步骤(页面呈现数据):
- Views.py中import models
- article = models.Article.objects.get(pk=1)
- render(request, page, {‘article’:article})
前端步骤:
- 模板可直接使用对象以及对象的”.”操作
- {{article.title}}
Amin简介:什么是Admin?
- Admin是Django自带的一个功能强大的自动化数据管理界面
- 被授权的用户可直接在Admin中管理数据库
- Django提供了许多针对Admin的定制功能
配置Admin
- python manage.py createsuperuser 创建超级用户
- 访问地址: http://127.0.0.1:999/admin/
- 变成中文修改settings.py中LANGUAGE_CODE = “zh_Hans”
配置应用
- 在应用下admin.py中引入自身的models模块(或里面的模型类)
- 编辑admin.py: admin.site.register(models.Article)
使用Admin修改数据:
- 点击Article超链接进入Article列表页面
- 点击任意一条数据,进入编辑页面修改
- 编辑页面下方一排按钮可执行相应操作
修改数据默认显示名称:
- 在Article类下添加一个方法
- 根据python版本选择__str__(self)(python3使用这个)或__unicode_(self)
- return self.tile
博客页面设计
- 博客主页面
- 博客文章内容页面
- 博客撰写页面
主页面内容:
- 文章标题列表,超链接
- 发表博客按钮(超链接)
列表编写思路:
- 取出数据库中所有文章对象
- 将文章对象打包成列表,传递到前端
- 前端页面把文章以标题超链接的形式逐个列出
模板For循环语法:
- {% for xx in xxs %}
- HTML语句
- {% endfor %}
博客文章页面:
- 标题
- 文章内容
- 修改文章按钮(超链接)
URL传递参数:
- 参数写在响应函数中request后,可以有默认值
- URL正则表达式 r'^article/(?P<article_id>[0-9]+)$
- URL正则中的组名必须和参数名一致
超链接目标地址:
- href后面是目标地址
- Template中可以用”{% url ‘app_name:url_name’ param %}”
- 其中app_name 和url_name都在url中配置
url函数的名称参数
- 根urls, 写在include()的第二个参数位置,namespace=’blog’
- 应用下则写在url()的第三个参数位置,name=’article’
- 主要取决于是否使用include引用了另一个url配置文件
博客撰写页面,页面内容
- 标题编辑栏
- 文章内容编辑区域
- 提交按钮
编辑响应函数:
- 使用request.POST[ ‘ 参数名’ ]获取表单数据
- models.Article.objects.create(title,content)创建对象
- 涉及POST方法提交表单的, 前端页面加上{% csrf_token %}
两个编辑页面(思路):
- 新文章为空,修改文章有内容
- 修改文章页面有文章对象
- 文章的ID
博客撰写界面修改数据
- article.title = title
- article.save()
Temple过滤器,什么是过滤器?
- 写在模板中,属于Django模板语言
- 可以修改模板中的变量,从而显示不同的内容
怎么使用过滤器:
- {{value | filter}}
- 例子:{{ list_nums | length}}
- 过滤器可叠加:{{value | filter1 | filter2|…}}
Django Shell
- 它是一个python的交互式命令行程序
- 它自动引入了我们的项目环境
- 我们可以使用它与我们的项目进行交互
如何使用DjangoShell?
- Python manage.py shell
- from blog.models import Article
- Article.objects.all()
有什么用?
- 我们可以使用Django shell 来进行一些调试工作
- 测试未知的方法
Admin:创建admin配置类
- Class ArticleAdmin(admin.ModelAdmin)
- 注册:admin.site.register(Article, ArticleAdmin)
显示其他字段:
- List-display = (‘title’, ‘content’)
- List_display 同时支持tuple和list
过滤器:
- List_filter = (‘pub-time’)
相关代码地址:https://github.com/jiyanjiao/myblog
配置Django manage.py直接在pycharm中运行
1. 选中当前工程 点击Run -----> EditConfiguration 
Django开发简单博客流程的更多相关文章
- Django开发个人博客入门学习经验贴
[写在前面] 入门学习搭建个人博客系统首先还是参考大佬们的经验,记得刚入手Django的时候,一篇博客大佬说过一句话,做技术的不要一开始就扎头于细节中,先把握整体框架,了解这个对象之后再去了解细节,进 ...
- django 开发简易博客(二)
这一节我们来了解模板和视图.URL的使用. 一.使用模板 在blog目录中新建templates文件夹,在templates文件夹下新建base.html文件.目录结构如下 templates/ ba ...
- django开发简易博客(一)
这几篇博客是根据GoodSpeed的博客该写的,看了他的博客收获很大,但是他的博客从第三篇开始,条理很不清晰,加之又是几年之前写的,编写环境发生很大改变,所以对他的博客进行了一个整理,加入了一些自己的 ...
- django开发简易博客(四)
上一节,我们讲述了怎么使用静态文件,并使用bootstrap对页面进行了美化,这一节我们将增强我们blog的功能,添加发表博客,删除博客的功能. 一.表单的使用 要实现添加blog的功能,就得使用表单 ...
- python关于Django搭建简单博客项目(详解一)
上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答.本文没有特定顺序,请结合上一篇和源代码参照学习. 相关源代码和解析请参看:https://github.com/Cheng0829/mysi ...
- python关于Django搭建简单博客项目(教程)
由于csdn各种django blog博文都有或多或少的bug,所以我决定自己写一篇,先附上教程,详解在另一篇博文里,为了便于大家复制粘贴,本文代码尽量不使用图片. 源代码及解析文章请在我的githu ...
- django开发简易博客(三)
一.静态文件的使用 首先,新建static目录,目录下分别建立css.js.img三个子目录 修改settings.py文件 STATICFILES_DIRS = ( 'F:/web/static', ...
- python关于Django搭建简单博客项目 详解二-setting.py
这一篇我们来讲解setting.py,具体内容以注释形式写入到下面的setting.py代码中,篇幅所限已把官方所给英文注释删除. 全部源代码和详解请参看http://github.com/Cheng ...
- django开发简易博客(五)
这一节将讲述如何添加comments库与ajax的支持. 一.添加comments库 comments库是是django框架内置的一个评论库,可以快速的搭建岀一个评论系统,不过再自定义方面有些麻烦,不 ...
随机推荐
- shell for循环输出目录下的文件名
test.sh文件: #!/bin/bash for file in `ls`;do echo $file done 输出 bogon:test macname$ chmod +x test.sh b ...
- Jmeter(四十七)_性能测试统计超时率
概述 今天做一个性能测试的案例.需求中给出并发人数和业务时间段.根据2,5,8原则,统计响应超时率 实际场景 1:登录--考勤打卡--退出 2:并发人数200人,业务持续时间5分钟 3:要求登录响应时 ...
- jquery给label绑定click事件被触发两次解决方案
首先我们看下面的代码片段(label包裹checkbox) <div class="example"><label for="chk_6" c ...
- C++ std::map 屏蔽排序
转载:https://blog.csdn.net/sendinn/article/details/96286849 最近在项目中用标准库中的关联性容器map,但知道map默认升序的,但在一个需求时又不 ...
- 运维笔记--Ubuntu离线安装jdk1.8(JDK8)Java环境
Ubuntu离线环境安装jdk1.8 系统版本:Ubuntu16.04 其他Ubuntu版本安装类似 Jdk版本:8 1. 下载相应离线软件包 Jdk oracle官方下载地址:https://www ...
- MQTT研究之EMQ:【eclipse的paho之java客户端使用注意事项】
这里,简单记录一下自己在最近项目中遇到的paho的心得,这里也涵盖EMQX的问题. 1. cleanSession 这个标识,是确保client和server之间是否持久化状态的一个标志,不管是cli ...
- Python之多态案例
class Canvas: def draw_pic(self, shape): print('--start draw--') shape.draw(self) class Rectangle: d ...
- fashion MNIST识别(Tensorflow + Keras + NN)
Fashion MNIST https://www.kaggle.com/zalando-research/fashionmnist Fashion-MNIST is a dataset of Zal ...
- ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞
ThinkPHP 5.0.x.5.1.x.5.2.x 全版本远程代码执行漏洞 作者:SoulCat. 来源:CSDN 原文:https://blog.csdn.net/csacs/article/de ...
- docker 国内镜像加速
CentOS7 对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件): {"registry-mirrors& ...