zoukankan      html  css  js  c++  java
  • Django——9 博客小案例的实现

    Django  博客小案例的实现

    主要实现博客的增删改查功能

    1. 主页index.html  -->  展示添加博客和博客列表的文字,实现页面跳转
    2. 添加页add.html  --> 输入文章标题和内容,并讲数据提交到数据库中
    3. 列表页list.html  -->将数据库中所有博客展示到视图函数中,点击文章标题可以查看文章的详情,附带编辑和删除的功能
    4. 详情页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': '3306'
        }
    }

    配置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 %}

     效果:

     

    点击文章列表

     

    点击撰写博客

    点击编辑

    点击删除

  • 相关阅读:
    POJ 2029 (二维树状数组)题解
    HDU 4819 Mosaic (二维线段树&区间最值)题解
    HDU 1823 Luck and Love (二维线段树&区间最值)题解
    POJ1061 青蛙的约会(扩展欧几里得)题解
    POJ 2155 Matrix (二维树状数组)题解
    POJ 1751 Highways(最小生成树&Prim)题解
    HDU 6148 Valley Numer (数位DP)题解
    HDU3652 B-number(数位DP)题解
    HDU 4734 (数位DP)题解
    HDU 2089 不要62 (数位DP)题解
  • 原文地址:https://www.cnblogs.com/pywjh/p/10203522.html
Copyright © 2011-2022 走看看