小白学习django第五站-简易案例

首先在setting.py文件中编写数据库配置内容

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘site‘,
        ‘USER‘: ‘user‘,
        ‘PASSWORD‘: ‘123456‘,
        ‘HOST‘: ‘127.0.0.1‘,
        ‘PORT‘: ‘3306‘,
    }
}

之后在app中models.py文件编写模型映射表

from django.db import models

# Create your models here.

class BlogModle2(models.Model):
    title = models.CharField(max_length=50)  # 标题
    content = models.TextField()        # 内容

    def __str__(self):
        return f‘title={self.title}, content={self.content}‘

通过pycham的控制台输入

makemigrations appname
migrate appname

创建数据库中的表

之后进行模版渲染,在app中views.py中编写index, add, list, detail, edit这五个函数

index

from django.shortcuts import render, redirect, reverse
from django.http import HttpResponse
from .models import BlogModle2
# Create your views here.

def blog_index(request):                                # 主页函数
    return render(request, ‘blog/demo_index.html‘)    # 渲染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 %}

add

def blog_add(request):                                  # 添加页面
    if request.method == ‘GET‘:                           # 如果请求为get请求
        return render(request, ‘blog/demo_add.html‘)    # 渲染 add 页面
    elif request.method == ‘POST‘:                        # 如果请求为post页面
        title = request.POST.get(‘title‘)                 # 获取form表单填写的标题
        content = request.POST.get(‘content‘)             # 获取form表单填写的内容
        blog = BlogModle2(title=title, content=content)     # 数据库写入
        blog.save()
        return render(request, ‘blog/demo_add.html‘)    # 渲染add页面
{% extends ‘blog/demo_base.html‘ %}
{% block title %}
    添加博客
{% endblock %}
{% block bodyblock %}
    <h1>添加新文章</h1>
    <form action="" method="POST">
        {% csrf_token %}     {# 防止跨域攻击与请求 #}
{#    <form action="" method="GET"> {% 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 %}

list

def blog_list(request):                                 # 列表页面
    blog_list = BlogModle2.objects.all()                    # 获取数据库表中所有内容
    return render(request, ‘blog/demo_list.html‘, context={‘blog_list‘: blog_list}) # 传递blog_list内容,渲染list页面
{% 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>
    {% 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_delete‘ blog.id %}">删除 </a></th>
        </tr>
    {%  endfor %}
    </tbody>
    </table>

{% endblock %}

detail

def blog_detail(request, blog_id):                      # 详情页面
    blog = BlogModle2.objects.get(id=blog_id)               # 获取选中数据库表中标题那条数据
    return render(request, ‘blog/demo_detail.html‘, context={‘blog‘: blog})  # 渲染detail页面
{% extends ‘blog/demo_base.html‘ %}
{% block title %}
    文章详情
{% endblock %}
{% block bodyblock %}
    <h1>{{ blog.title }}</h1>
    {{ blog.content }}
{% endblock %}

delete

def blog_delete(request, blog_id):                      # 删除功能
    blog = BlogModle2.objects.get(id=blog_id)               # 获取选中数据库表中标题那条数据
    if blog:                                                # 如果存在
        blog.delete()                                       # 删除
        return redirect(reverse(‘blog_list‘))               # 返回列表页面
    else:
        return HttpResponse(‘不存在这条博客‘)

edit

def blog_edit(request, blog_id):                    # 编辑
    blog = BlogModle2.objects.get(id=blog_id)        # 获取选中数据库中数据
    if request.method == ‘GET‘:                     # 如果是GET请求
        return render(request, ‘blog/demo_add.html‘, context={‘blog‘: blog})    # 渲染add页面,自动填入获取内容
    elif request.method == ‘POST‘:                  # 如果是post请求
        blog.title = request.POST.get(‘title‘)      # 标题修改
        blog.content = request.POST.get(‘content‘)  # 内容修改
        blog.save()
        return redirect(reverse(‘blog_list‘))       # 重定向到list页面

urls.py

from django.urls import path, re_path
from . import views

urlpatterns = [
    path(‘index/‘, views.blog_index, name=‘blog_index‘),
    path(‘add/‘, views.blog_add, name=‘blog_add‘),
    path(‘list/‘, views.blog_list, name=‘blog_list‘),
    path(‘detail/<blog_id>‘, views.blog_detail, name=‘blog_detail‘),
    path(‘delete/<blog_id>‘, views.blog_delete, name=‘blog_delete‘),
    path(‘edit/<blog_id>‘, views.blog_edit, name=‘blog_edit‘),
]

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}

    {% endblock %}</title>
</head>
<body>
{% block bodyblock %}

{% endblock %}

</body>
</html>

原文地址:https://www.cnblogs.com/xnnx/p/11327210.html

时间: 2024-07-29 19:03:12

小白学习django第五站-简易案例的相关文章

小白学习windows第五篇

一. 创建共享文件夹通过公用文件夹共享文件通过计算机上的文件夹设置共享右击文件夹-属性-共享-高级共享-勾选共享此文件夹二. 访问共享文件夹1.通过"网络"浏览(必须启用"网络发现")2.通过UNC路径\服务器IP\共享名或\服务器名\共享名3.映射网络驱动器net use H: \服务器IP\共享名(都是在客户端上映射) 三. 共享权限应用规则共享权限只对网络来访问共享文件夹用户有效1. 共享权限分类:完全控制,更改.读取.(默认everyone只读) 2.权限的

小白学习server第五篇-----虚拟(目录/主机),防火墙,文档加密

虚拟目录? 通过别名方式挂载到网站根目录下的其他目录? 虚拟目录优点– 便于分别开发与维护– 移动位置不影响站点逻辑结构虚拟主机? 服务器上运行的多个网站称为虚拟主机? 实现虚拟主机的方式– 使用不同IP地址– 相同IP地址,不同端口号– 相同IP地址及端口号,不同主机名 Windows防火墙网络位置类型? 公用网络– 默认情况下,第一次连接到Internet时,操作系统会为任何新的网络连接设置为公用网络位置类型– 使用公用网络位置时,操作系统会阻止某些应用程序和服务运行,从而保护计算机? 专用

Django学习笔记(五)—— 表单

疯狂的暑假学习之  Django学习笔记(五)-- 表单 参考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path                                 除域名以外的请求路径,斜杠开头                      "/hello/" request.get_host()                      主机名                              

Drupal 7 建站学习手记(五):HTML文档流overflow的问题

背景 项目要求网站首页放Views生成的区块,并且要求有更多链接. Views生成的区块默认的更多链接只能选在列表上方和下方 下图是默认在上方的样式图: 为了美观,我将更多链接上移了若干个像素: .more-link { position: absolute; top: 10px; left: 390px; } 效果图: 问题 然而,当我在这个区块外面再套一层区块时, (比如我这里用了QuickTabs模块,实际上是一个嵌套区块) 这个更多链接怎么都不显示了: 探究 第一反应是z-index的问

EOS小白学习(五)EOS的HTTP API

欢迎来到EOS小白学习系列,本系列会记录EOS学习过程中的一些操作和细节,大饼果子非C++出身,如有错误,欢迎指出 接上一篇: 本篇将会列出EOS支持的HTTP API(chain和history),没有过多的讲解,只是方便大家调用 1. chain/get_info(请求链的信息) POST: http://127.0.0.1:8888/v1/chain/get_info BODY: 什么都不需要填 {} RESPONSE: { "server_version": "756

分布式管中窥豹之zookeeper小白学习(五)启动zookeeper仲裁模式

欢迎来到分布式管中窥豹之zookeeper小白学习系列,本系列会记录zookeeper以及分布式系统学习过程中的一些操作和细节,大饼果子非科班出身,如有错误,欢迎指出 本篇将启动zookeeper服务的仲裁模式,三个节点将以不同的端口号在本地被启动 1. 首先我们需要修改一下配置文件 节点1的配置文件z1.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/Users/dabingguozi/Documents/zookeeper/data/z

javascript小白学习指南0---1

引言: 做为一名程序员,都是真心的想把自己的东西分享出来,供大家一起学习探讨,一起提高技能,一起涨工资,呵 这一系列的文章都是关于Javascript 基础的 当然文章当中穿插了些我自己的理解,希望可以帮助一些刚开始的童鞋! 废话不多说我们开始吧! 第一章:Javascript 基本概念 主要内容 数据类型 控制语句 函数 我们先从最简单的数据类型开始吧! 首先请记住javascript 有5种基本数据类型和1种复杂数据类型,至于为什么只有这六种,大家可以去翻翻W3C的资料哈! 五种基本数据类型

学习django就看这本书了!django book 2.0中文版

所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/29/ 来源:python黑洞网 djano介绍 Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的. 它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的 程序员 Adrian Holovaty 和Simon Willison 开

电脑小白学习软件开发-C#语言基础之循环重点讲解,习题

写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的人.当然因为技术的连贯性,推荐按照顺序查看. 上次课程:电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货 近期,致力于进行C#语言教程的写作.写一系列可以供电脑小白学习软件开发的文章,帮助更多初学者入门学习IT编程. 课程总目录:因头条无法自定义目录,大家关注:“做全栈攻城狮”微信公众号