小白学习django第五站-简易案例
首先在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第五站-简易案例的更多相关文章
- 小白学习django第六站-http相关
请求与相应 HttpRequest对象API def home(request): print('path:', request.path) print('mothod:', request.meth ...
- 小白学习django第四站-关联数据库
使用mysql连接django首先要配置好相关环境 首先在setting.py配置数据库信息(需要现在mysql中创建一个数据库) 在setting.py那个目录的__init__.py文件中写入 之 ...
- 小白学习django第三站-自定义过滤器及标签
要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...
- 小白学习django第一站-环境配置
Django简单来说就是用Python开发的一个免费开源的Web框架 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 开搞!!! 工具准备: linux(ubuntu) + py ...
- 小白学习django第二站-模版配置
上一站说道app创建,接下来我们来配置app的url路由 首先需要到setting.py中添加book这个app, 再到django_test文件里的urls添加路由 include() : 这个函数 ...
- 小白学习Spark系列五:scala解析多级json格式字符串
一.背景 处理json格式的字符串,key值一定为String类型,但value不确定是什么类型,也可能嵌套json字符串,以下是使用 JSON.parseFull 来解析多层json. 二.实例代码 ...
- 小白学习tornado框架第一站-环境设置
首先建立一个虚拟环境 mkvirtualenv -p /usr/bin/python3 tornado_1 安装tornado框架 pip install tornado pycham中建立同步 创 ...
- 小白学习vue第五天-第二弹(全局局部、父子、注册语法糖,script/template抽离模板)
全局组件: 就是注册的位置在实例对象的外面 并且可以多个实例对象使用 而局部: 就是在实例对象的内部注册 父组件和子组件的关系 子组件就是在另一个组件里面注册的组件 组件注册语法糖: 就不用Vue.e ...
- 小白学习vue第五天(理解使用组件开发,组件第一弹)
组件怎么从创建到使用? 第一步创建组件构造器对象 感觉个人理解就是创建一个模板,和创建MongoDB数据模板相似 const cpnC = Vue.extend({ template: ` <d ...
随机推荐
- codeforces gym #101873B. Buildings(Polya定理)
参考博客: https://blog.csdn.net/liangzhaoyang1/article/details/72639208 题目链接: https://codeforces.com/gym ...
- 「HEOI2016/TJOI2016」 排序
题目链接 戳我 \(Solution\) 这道题在线的做法不会,所以这里就只讲离线的做法. 因为直接排序的话复杂度显然不对.但是如果数列为\(01\)串的话就可以让复杂度变成对的了 那么\(01\)串 ...
- mybatis延迟加载(Collection)
上篇讲了assocation,同样我们也可以在一对多关系配置的结点中配置延迟加载策略. 结点中也有 select 属性,column 属性. 需求: 完成加载用户对象时,查询该用户所拥有的账户信息. ...
- LeetCode 73. 矩阵置零(Set Matrix Zeroes)
题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1 ...
- 基本CSS布局
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 朴素贝叶斯文本分类-在《红楼梦》作者鉴别的应用上(python实现)
朴素贝叶斯算法简单.高效.接下来我们来介绍其如何应用在<红楼梦>作者的鉴别上. 第一步,当然是先得有文本数据,我在网上随便下载了一个txt(当时急着交初稿...).分类肯定是要一个回合一个 ...
- Python将函数放入模块
函数可以将通用的代码封装起来,便于其他程序或者方法调用.将函数存放在文件中,这个文件被称为模块.将函数存储在独立的模块中,可与其他程序员共享这些文件而不是整个程序. fun.py def say_hi ...
- rocketmq的以集群模式MessageModel.CLUSTERING实现消费者集群消费消息,实现负载均衡
package com.bfxy.rocketmq.model; import java.util.List; import org.apache.rocketmq.client.consumer.D ...
- 1.1 从零搭建Go语言开发环境
一.下载 下载地址: Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 版本的选择 Windows平台和 ...
- 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 ...