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

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME': 'site',
  5. 'USER': 'user',
  6. 'PASSWORD': '',
  7. 'HOST': '127.0.0.1',
  8. 'PORT': '',
  9. }
  10. }

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

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. class BlogModle2(models.Model):
  6. title = models.CharField(max_length=50)  # 标题
  7. content = models.TextField()        # 内容
  8.  
  9. def __str__(self):
  10. return f'title={self.title}, content={self.content}'

通过pycham的控制台输入

  1. makemigrations appname
  2. migrate appname

创建数据库中的表

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

index

  1. from django.shortcuts import render, redirect, reverse
  2. from django.http import HttpResponse
  3. from .models import BlogModle2
  4. # Create your views here.
  5.  
  6. def blog_index(request): # 主页函数
  7. return render(request, 'blog/demo_index.html') # 渲染index页面
  1. {% extends 'blog/demo_base.html' %}
  2.  
  3. {% block title %}
  4. 首页
  5. {% endblock %}
  6.  
  7. {% block bodyblock %}
  8. <tr>
  9. <td><a href="{% url 'blog_add' %}">添加文章</a></td>
  10. <td><a href="{% url 'blog_list' %}">文章列表</a></td>
  11. </tr>
  12. {% endblock %}

add

  1. def blog_add(request): # 添加页面
  2. if request.method == 'GET': # 如果请求为get请求
  3. return render(request, 'blog/demo_add.html') # 渲染 add 页面
  4. elif request.method == 'POST': # 如果请求为post页面
  5. title = request.POST.get('title') # 获取form表单填写的标题
  6. content = request.POST.get('content') # 获取form表单填写的内容
  7. blog = BlogModle2(title=title, content=content) # 数据库写入
  8. blog.save()
  9. return render(request, 'blog/demo_add.html') # 渲染add页面
  1. {% extends 'blog/demo_base.html' %}
  2. {% block title %}
  3. 添加博客
  4. {% endblock %}
  5. {% block bodyblock %}
  6. <h1>添加新文章</h1>
  7. <form action="" method="POST">
  8. {% csrf_token %} {# 防止跨域攻击与请求 #}
  9. {# <form action="" method="GET"> {% csrf_token %}#}
  10. 标题<input type="text" autocomplete="off" id="title"
  11. placeholder="请输入标题" name='title' value="{{ blog.title }}"> <br> <br><br>
  12. 内容 <textarea name="content" id="content"
  13. placeholder="请输入内容" cols="30" rows="10">{{ blog.content }}</textarea>
  14. <button type="submit">发布博客</button>
  15. </form>
  16. {% endblock %}

list

  1. def blog_list(request): # 列表页面
  2. blog_list = BlogModle2.objects.all() # 获取数据库表中所有内容
  3. return render(request, 'blog/demo_list.html', context={'blog_list': blog_list}) # 传递blog_list内容,渲染list页面
  1. {% extends 'blog/demo_base.html' %}
  2. {% block title %}
  3. 文章列表
  4. {% endblock %}
  5.  
  6. {% block bodyblock %}
  7. <h1 style="margin-left: 100px">文章列表</h1>
  8. <table width="400px">
  9. <thead style="font-size:20px">
  10. <tr>
  11. <th>标题</th>
  12. <th>操作</th>
  13. </tr>
  14. </thead>
  15. <tbody>
  16. {% for blog in blog_list %}
  17. <tr>
  18. <th><a href="{% url 'blog_detail' blog.id %}">{{ blog.title }}</a></th>
  19. <th><a href="{% url 'blog_edit' blog.id %}">编辑</a> | <a href="{% url 'blog_delete' blog.id %}">删除 </a></th>
  20. </tr>
  21. {% endfor %}
  22. </tbody>
  23. </table>
  24.  
  25. {% endblock %}

detail

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

delete

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

edit

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

urls.py

  1. from django.urls import path, re_path
  2. from . import views
  3.  
  4. urlpatterns = [
  5. path('index/', views.blog_index, name='blog_index'),
  6. path('add/', views.blog_add, name='blog_add'),
  7. path('list/', views.blog_list, name='blog_list'),
  8. path('detail/<blog_id>', views.blog_detail, name='blog_detail'),
  9. path('delete/<blog_id>', views.blog_delete, name='blog_delete'),
  10. path('edit/<blog_id>', views.blog_edit, name='blog_edit'),
  11. ]

base.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{% block title %}
  6.  
  7. {% endblock %}</title>
  8. </head>
  9. <body>
  10. {% block bodyblock %}
  11.  
  12. {% endblock %}
  13.  
  14. </body>
  15. </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. codeforces gym #101873B. Buildings(Polya定理)

    参考博客: https://blog.csdn.net/liangzhaoyang1/article/details/72639208 题目链接: https://codeforces.com/gym ...

  2. 「HEOI2016/TJOI2016」 排序

    题目链接 戳我 \(Solution\) 这道题在线的做法不会,所以这里就只讲离线的做法. 因为直接排序的话复杂度显然不对.但是如果数列为\(01\)串的话就可以让复杂度变成对的了 那么\(01\)串 ...

  3. mybatis延迟加载(Collection)

    上篇讲了assocation,同样我们也可以在一对多关系配置的结点中配置延迟加载策略. 结点中也有 select 属性,column 属性. 需求: 完成加载用户对象时,查询该用户所拥有的账户信息. ...

  4. LeetCode 73. 矩阵置零(Set Matrix Zeroes)

    题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   [1,0,1],   [1,1,1 ...

  5. 基本CSS布局

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. 朴素贝叶斯文本分类-在《红楼梦》作者鉴别的应用上(python实现)

    朴素贝叶斯算法简单.高效.接下来我们来介绍其如何应用在<红楼梦>作者的鉴别上. 第一步,当然是先得有文本数据,我在网上随便下载了一个txt(当时急着交初稿...).分类肯定是要一个回合一个 ...

  7. Python将函数放入模块

    函数可以将通用的代码封装起来,便于其他程序或者方法调用.将函数存放在文件中,这个文件被称为模块.将函数存储在独立的模块中,可与其他程序员共享这些文件而不是整个程序. fun.py def say_hi ...

  8. rocketmq的以集群模式MessageModel.CLUSTERING实现消费者集群消费消息,实现负载均衡

    package com.bfxy.rocketmq.model; import java.util.List; import org.apache.rocketmq.client.consumer.D ...

  9. 1.1 从零搭建Go语言开发环境

    一.下载 下载地址: Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 版本的选择 Windows平台和 ...

  10. LC 954. Array of Doubled Pairs

    Given an array of integers A with even length, return true if and only if it is possible to reorder ...