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

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

之后在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>

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

  1. 小白学习django第六站-http相关

    请求与相应 HttpRequest对象API def home(request): print('path:', request.path) print('mothod:', request.meth ...

  2. 小白学习django第四站-关联数据库

    使用mysql连接django首先要配置好相关环境 首先在setting.py配置数据库信息(需要现在mysql中创建一个数据库) 在setting.py那个目录的__init__.py文件中写入 之 ...

  3. 小白学习django第三站-自定义过滤器及标签

    要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...

  4. 小白学习django第一站-环境配置

    Django简单来说就是用Python开发的一个免费开源的Web框架 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 开搞!!! 工具准备: linux(ubuntu) + py ...

  5. 小白学习django第二站-模版配置

    上一站说道app创建,接下来我们来配置app的url路由 首先需要到setting.py中添加book这个app, 再到django_test文件里的urls添加路由 include() : 这个函数 ...

  6. 小白学习Spark系列五:scala解析多级json格式字符串

    一.背景 处理json格式的字符串,key值一定为String类型,但value不确定是什么类型,也可能嵌套json字符串,以下是使用 JSON.parseFull 来解析多层json. 二.实例代码 ...

  7. 小白学习tornado框架第一站-环境设置

    首先建立一个虚拟环境 mkvirtualenv -p /usr/bin/python3 tornado_1 安装tornado框架 pip install tornado  pycham中建立同步 创 ...

  8. 小白学习vue第五天-第二弹(全局局部、父子、注册语法糖,script/template抽离模板)

    全局组件: 就是注册的位置在实例对象的外面 并且可以多个实例对象使用 而局部: 就是在实例对象的内部注册 父组件和子组件的关系 子组件就是在另一个组件里面注册的组件 组件注册语法糖: 就不用Vue.e ...

  9. 小白学习vue第五天(理解使用组件开发,组件第一弹)

    组件怎么从创建到使用? 第一步创建组件构造器对象 感觉个人理解就是创建一个模板,和创建MongoDB数据模板相似 const cpnC = Vue.extend({ template: ` <d ...

随机推荐

  1. Python基础之算术运算符

    如下图所示, 假设变量a = 10, b = 20:

  2. vue 使用axios 出现跨域请求的两种解决方法

    最近在使用vue axios发送请求,结果出现跨域问题,网上查了好多,发现有好几种结局方案. 1:服务器端设置跨域 header(“Access-Control-Allow-Origin:*”); h ...

  3. HailStone序列

    目前HailStone序列还未被证明是否有穷,所以它未必是一个算法. * HailStone序列* n=1时,返回1:* n>1时且为偶数时,{n} ∪ {n/2}* n>1时且为奇数时, ...

  4. LC 656. Coin Path 【lock, Hard】

    Given an array A (index starts at 1) consisting of N integers: A1, A2, ..., AN and an integer B. The ...

  5. 后端脚手架搭建--SSM(一)开篇

    一.絮叨 一直在计划自己搭建一个后台的管理系统脚手架,也已经开始着手做了,但是做的过程中一直出现混乱的状态.在前端技术选型的时候觉得Vue不错,然后去学了一段时间的Vue,准备拿来在项目里面用.然后又 ...

  6. 利用Calendar类判断是平年还是闰年

    package com.bgs.Math; import java.util.Calendar; import java.util.Scanner; /*###14.21_常见对象(如何获取任意年份是 ...

  7. MySQL数据表列转行

    简单例子 数据结构如下 use dataTest create table t_score ( name ) , subject ), grade ,) ) INSERT INTO `t_score` ...

  8. springboot整合mybatis时java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

    时区问题造成的,解决方法是在数据源配置文件中在数据库链接处增加参数&serverTimezone=GMT%2B8对时区进行配置,配置为东八区. 修改前:spring.datasource.ur ...

  9. Python之异常处理合集

    PermissionError: [Errno 13] Permission denied open(filePath)中的filePath是一目录路径,而非目录路径 先前打开的file文件对象未被关 ...

  10. gin框架教程:代码系列demo地址

    gin框架教程代码地址: https://github.com/jiujuan/gin-tutorial demo目录: 01quickstart 02parameter 03route 04midd ...