小白学习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 ...
随机推荐
- (十一)C语言之选择结构
- How to Fix Grub error: no such partition Grub Rescue
错误信息: error: no such partition Entering rescue mode... grub rescue> _ 错误原因: grub找不到文件normal.mod 解 ...
- Ubuntu16 升级nodejs版本
Ubuntu16下,使用apt-get下载的nodejs最新版本为v4.2.6,而react-native需要v8.x及以上的版本 解决方法在网上找到了这一篇博客Ubuntu安装最新版nodejs,用 ...
- 认识git的简单命令
一.课程目的 教大家学会it的简单命令(老师建议 English 的前后要加空格) 二.认识 git 命令 整篇文章都是用语雀写的. 解释了(使用git)绑定gitee的操作 https://www. ...
- spark streaming 4: DStreamGraph JobScheduler
DStreamGraph有点像简洁版的DAG scheduler,负责根据某个时间间隔生成一序列JobSet,以及按照依赖关系序列化.这个类的inputStream和outputStream是最重要的 ...
- thinkpad T480安装WIN7
本文转载自http://www.dnxtc.net/zixun/zhuangjijiaocheng/2018-12-01/3256.html 防止忘记 特别把资源集中一下 新买的笔记本预装的WIN10 ...
- oracle 导出关键字说明
关键字 说明(默认) ----------------------------------------- UserId 用户名/口令 Full 导出整个文件(N) Buff ...
- Maven打包时出现无法下载org.apache.maven.plugins插件
解决方式: 方式1:使用 mvn clean package -U 打包即可(注意:出于性能原因,Maven缓存插件无法下载的信息.根据您的设置,您可能需要通过将标志添加-U到命令行来清除此缓存,以使 ...
- Centos 在线安装 nginx
centos 在线安装 nginx 安装nginx 参考文档: http://nginx.org/en/linux_packages.html 中的RHEL/CentOS章节,按照步骤安装repo ...
- k8s开启cadvisor http 服务
k8s开启cadvisor http 服务 cadvisor介绍: Google的 cAdvisor 是另一个知名的开源容器监控工具. 只需在宿主机上部署cAdvisor容器,用户就可通过Web界面或 ...