Django——9 博客小案例的实现
Django 博客小案例的实现
主要实现博客的增删改查功能
- 主页index.html --> 展示添加博客和博客列表的文字,实现页面跳转
- 添加页add.html --> 输入文章标题和内容,并讲数据提交到数据库中
- 列表页list.html -->将数据库中所有博客展示到视图函数中,点击文章标题可以查看文章的详情,附带编辑和删除的功能
- 详情页detail.hrml --> 显示文章的标签和内容
数据库传入到模板框图

现在创建项目:
新建项目:django-admin startproject project_name
同步到pycharm后,设置settings
ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog'
] TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
] DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my_site',
'USER': 'pywjh',
'PASSWORD': 'pywjh',
'HOST': '127.0.0.1',
'PORT': ''
}
}
配置models.py文件
from django.db import models # Create your models here. class Blog(models.Model):
title = models.CharField(max_length=100)
content = models.TextField() def __str__(self):
return 'Blog<title=%s, content=%s>'%(
self.title, self.content
)
再配置__init__文件
import pymysql
pymysql.install_as_MySQLdb()
再新建APP python manage.py startapp blog
新建templates模板文件

在templates中新建文件夹blog及各个文件

demo_base,html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %} {% endblock %}</title>
</head>
<body>
{% block bodyblock %} {% endblock %} </body>
</html>
demo_add.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    添加博客
{% endblock %}
{% block bodyblock %}
    <h1>添加新文章</h1>
    <form action="" method="POST"> {% csrf_token %}
        标题<input type="text" autocomplete="off" id="title"
                 placeholder="请输入标题" name='title'> <br> <br><br>
        内容 <textarea name="content" id="content"
                     placeholder="请输入内容" cols="30" rows="10"></textarea>
        <button type="submit">发布博客</button>
    </form>
{% endblock %}
demo_index.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    首页
{% endblock %}
{% block bodyblock %}
    <tr>
        <td><a href="#">添加文章</a></td>
        <td><a href="#">文章列表</a></td>
    </tr>
{% endblock %}
demo_detail.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    文章详情
{% endblock %}
{% block bodyblock %}
    <h1>文章标题</h1>
    文章内容
{% endblock %}
demo_list.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    文章列表
{% endblock %}
{% block bodyblock %}
    <h1 style="margin-left: 100px">文章列表</h1>
    <table width="400px">
        <thead style="font-size:20px">
            <tr>
                <th>标题</th>
                <th>操作</th>
            </tr>
        </thead>
    <tbody>
        <tr>
            <th><a href="">文章1</a></th>
            <th><a href="">编辑</a> | <a href="">删除 </a></th>
        </tr>
        <tr>
            <th><a href="">文章2</a></th>
            <th><a href="">编辑</a> | <a href="">删除 </a></th>
        </tr>
    </tbody>
    </table>
{% endblock %}
先讲模板渲染出来,配置好urls和views
将demo_index修改
{% extends 'blog/demo_base.html' %}
{% block title %}
    首页
{% endblock %}
{% block bodyblock %}
    <tr>
        <td><a href="{% url 'blog_add' %}">添加文章</a></td>
        <td><a href="{% url 'blog_list' %}">文章列表</a></td>
    </tr>
{% endblock %}
urls.py
from django.urls import path
from . import views urlpatterns = [
path('index/', views.index, name='blog_index'),
path('add/', views.add, name='blog_add'),
path('list/', views.list, name='blog_list'),
path('detail/<blog_id>/', views.detail, name='blog_detail'),
path('detele/<blog_id>/', views.detele, name='blog_detele'),
path('edit/<blog_id>/', views.edit, name='blog_edit'),
]
vews.py
from django.shortcuts import render, redirect, reverse
from .models import Blog
from django.http import HttpResponse # Create your views here. def index(request):
return render(request, 'blog/demo_index.html') def add(request):
if request.method == 'GET':
return render(request, 'blog/demo_add.html')
elif request.method == 'POST':
title = request.POST.get('title')
content = request.POST.get('content')
Blog(title=title, content=content).save()
return redirect(reverse('blog_add'))
else:
return HttpResponse('操作有误') def list(request):
lis = Blog.objects.all()
return render(request, 'blog/demo_list.html', context={
'blog_list': lis
}) def detail(request, blog_id):
blog = Blog.objects.filter(id=blog_id).first()
if blog:
return render(request, 'blog/demo_detail.html', context={
'blog': blog
})
return HttpResponse('输入有误') def detele(request, blog_id):
blog = Blog.objects.filter(id=blog_id)
if blog:
blog.delete()
return redirect(reverse('blog_list'))
else:
return HttpResponse('操作有误') def edit(request, blog_id):
blog = Blog.objects.filter(id=blog_id).first()
if blog:
if request.method == 'POST':
title = request.POST.get('title')
content = request.POST.get('content')
Blog.objects.filter(id=blog_id).update(title=title, content=content)
return redirect(reverse('blog_add'))
return render(request, 'blog/demo_edit.html', context={
'blog': blog
})
return HttpResponse('操作异常')
demo_index.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    首页
{% endblock %}
{% block bodyblock %}
    <tr>
        <td><a href="{% url 'blog_add' %}">添加文章</a></td>
        <td><a href="{% url 'blog_list' %}">文章列表</a></td>
    </tr>
{% endblock %}
demo_add.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    添加博客
{% endblock %}
{% block bodyblock %}
    <h1>添加新文章</h1>
    <form action="" method="POST"> {% csrf_token %}
        标题<input type="text" autocomplete="off" id="title"
                 placeholder="请输入标题" name='title' value="{{ blog.title }}"><a style="margin-left: 63px;" href="{% url 'blog_list' %}">博客查阅</a> <br> <br><br>
        内容 <textarea name="content" id="content"
                     placeholder="请输入内容" cols="30" rows="10">{{ blog.content }}</textarea>
        <button type="submit">发布博客</button>
    </form>
{% endblock %}
demo_list.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    文章列表
{% endblock %}
{% block bodyblock %}
    <h1 style="margin-left: 100px">文章列表</h1>
    <table width="400px">
        <thead style="font-size:20px">
            <tr>
                <th>标题</th>
                <th>操作</th>
            </tr>
        </thead>
    <tbody>
    <h4 style="margin-left: 222px"><a href="{% url 'blog_add' %}"> 撰写博客</a></h4>
        {% for blog in blog_list %}
            <tr>
                <th><a href="{% url 'blog_detail' blog.id %}">{{ blog.title }}</a></th>
                <th><a href="{% url 'blog_edit' blog.id %}">编辑</a>
                    | <a href="{% url 'blog_detele' blog.id %}">删除 </a></th>
            </tr>
        {% endfor %}
    </tbody>
    </table>
{% endblock %}
demo_detail.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    文章详情
{% endblock %}
{% block bodyblock %}
    <h1>{{ blog.title }}</h1>
    {{ blog.content }}
{% endblock %}
demo_edit.html
{% extends 'blog/demo_base.html' %}
{% block title %}
    添加博客
{% endblock %}
{% block bodyblock %}
    <h1>添加新文章</h1>
    <form action="" method="POST"> {% csrf_token %}
        标题<input type="text" autocomplete="off" id="title"
                 placeholder="请输入标题" name='title' value="{{ blog.title }}"> <br> <br><br>
        内容 <textarea name="content" id="content"
                     placeholder="请输入内容" cols="30" rows="10">{{ blog.content }}</textarea>
        <button type="submit">发布博客</button>
    </form>
{% endblock %}
效果:

点击文章列表

点击撰写博客

点击编辑

点击删除

Django——9 博客小案例的实现的更多相关文章
- Django 09 博客小案例
		Django 09 博客小案例 urls.py from django.urls import path from . import views urlpatterns = [ path('index ... 
- 个人博客小案例(纯Django搭建)
		在看这篇文章的时候,必须有django基础,如果没有点击访问 一.环境配置 新建项目并做配置项目创建,创建APP并注册 创建模板并配置相应的路径,点击下载模板,配置方法点击访问 创建静态文件并配置,点 ... 
- 潭州课堂25班:Ph201805201 django框架 第九课 模型补充 博客小案例 (课堂笔记)
		聚合查询: 分组查询: annotate() 方法 例:查询某学院学生人数,(一对多查询) 以字典的形式输出 annotate(统计 ‘关联学生字段 出现的次,).字典形式(键,值) 例:查询每项课程 ... 
- Django搭建博客网站(三)
		Django搭建博客网站(三) 第三篇主要记录view层的逻辑和template. Django搭建博客网站(一) Django搭建博客网站(二) 结构 网站结构决定我要实现什么view. 我主要要用 ... 
- Django 系列博客(十三)
		Django 系列博客(十三) 前言 本篇博客介绍 Django 中的常用字段和参数. ORM 字段 AutoField int 自增列,必须填入参数 primary_key=True.当 model ... 
- Django 系列博客(十二)
		Django 系列博客(十二) 前言 本篇博客继续介绍 Django 中的查询,分别为聚合查询和分组查询,以及 F 和 Q 查询. 聚合查询 语法:aggregate(*args, **kwargs) ... 
- Django 系列博客(十)
		Django 系列博客(十) 前言 本篇博客介绍在 Django 中如何对数据库进行增删查改,主要为对单表进行操作. ORM简介 查询数据层次图解:如果操作 mysql,ORM 是在 pymysql ... 
- Django搭建博客网站(四)
		Django搭建博客网站(四) 最后一篇主要讲讲在后台文章编辑加入markdown,已经在文章详情页对markdown的解析. Django搭建博客网站(一) Django搭建博客网站(二) Djan ... 
- Django搭建博客网站(二)
		Django搭建自己的博客网站(二) 这里主要讲构建系统数据库Model. Django搭建博客网站(一) model 目前就只提供一个文章model和一个文章分类标签model,在post/mode ... 
随机推荐
- 【POJ 1328】 Radar Installation
			[题目链接] http://poj.org/problem?id=1328 [算法] 每个雷达都位于笛卡尔坐标系的x轴上,因此,对于每个岛屿,我们都可以用勾股定理算出它的有效管辖区域 那么,问题就被转 ... 
- JAVA不让类实例化的方法
			虽然java是面向对象编程,但也要尽可能避免创建不必要的对象,因为创建过多的对象不仅占用系统资源,而且多了很多不必要的创建销毁对象开销. 那么有哪些避免类创建对象的方法吗? 1,定义私有构造函数.这在 ... 
- Flink之Stateful Operators
			Implementing Stateful Functions source function的stateful看官网,要加lock Declaring Keyed State at the Runt ... 
- [Swift通天遁地]九、拔剑吧-(9)创建支持缩放、移动、裁切的相机视图控制器
			★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ... 
- 【转】Java中特殊的String类型
			Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第 ... 
- idea  ssm项目移包报错问题
			写完代码之后发现包结构太乱了 想要规划一下 结果报错 这里面的包路径都可以点进去,还是报找不到com.lf.company.entity.Business 后来发现是 在移动前和移动后都存在这个m ... 
- 面试说熟练掌握各种MQ?那你先看看这道题,面试官必问!
			写在前面 我们知道,目前市面上的MQ包括Kafka.RabbitMQ.ZeroMQ.RocketMQ等等. 那么他们之间究竟有什么本质区别,分别适用于什么场景呢? 上述抛出的问题,同样在不少公司的Ja ... 
- IE版本的判断
			var Sys = {};var ua = navigator.userAgent.toLowerCase(); var s;(s = ua.match(/msie ([\d.]+)/)) ? Sys ... 
- linux tmux基本操作
			1. 安装工具 Centos : yum install tmux 2. 基本操作 新建会话:tmux new -s session-name 查看会话:tmux ls 进入会话:tmux a -t ... 
- ASP.NET MVC5 之 Log4Net 的学习和使用
			最近在学习 log4Net 插件,在博客园找到了好多资料,但是实现起来还是有点麻烦. 现在记录下学习的过程,期间可能加载着借鉴和转载的代码. 1.配置文件的设置: 新建config文件夹下 log4n ... 
