首先在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. jQuery事件之一次性事件

    语法: $(selector).one(type, data, callback) 作用: (1)为每一个匹配元素的特定事件(比如click)绑定一个一次性的事件处理函数. (2)每个对象上,这个事件 ...

  2. 关于web前端开发,区别用户使用的终端设备代码

    对web前端开发,熟知不同的浏览器,的解析是基本技能,下面,我就向大家展示一下,如何获得当前用户所用的终端设备.车子一发动,请准备上车................... <script> ...

  3. PHP ob_get_level嵌套输出缓冲

    PHP的输出缓存是可以嵌套的.用ob_get_level()就可以输出嵌套级别. 测试发现在cli和浏览器下输出结果不一样(PHP5.4). ob_level1.png手册说明如下: ob_get_l ...

  4. 剑指offer-字符串的排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...

  5. 查看HearthBuddy.exe文件是x86还是x64版本

    https://www.cnblogs.com/chucklu/p/10020221.html 使用Powershell查看 PS C:\repository\GitHub\ChuckLu\Test\ ...

  6. python sqlalchemy 进行 mysql 数据库操作

    1. 进行mysql数据库的创建,如果已经存在,就相当于进行数据库的连接操作 from sqlalchemy import create_engine from sqlalchemy.ext.decl ...

  7. 设计模式--观察者模式--python

    观察者模式: 对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新. 主要解决: 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面.将这二者封装在 ...

  8. [net]tcp和udp&socket

    参考 TCP和UDP连接 关于传输层TCP.UDP协议可能我们平时遇见的会比较多,有人说TCP是安全的,UDP是不安全的,UDP传输比TCP快,那为什么呢,我们先从TCP的连接建立的过程开始分析,然后 ...

  9. 机器学习之SVM算法

    1.知识点 """ SVM,也称支持向量机:其优化核心为求取点到平面的距离最大化,主要是解决二分类问题 y = wx+b ,且 yi * y(i) >0 恒成立 思 ...

  10. shell中变量计算

    year=44 1.let,不需要$引用变量 let m=year+3 echo $m 2.(()) m=$((year+3)) 3.[  ],注意两边一定要有空格 m=$[ year+3 ] 4. ...