python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
day61
django内容回顾:
1. 下载:
pip install django==1.11.14
pip install -i 源 django==1.11.14
pycharm
2. 创建项目
命令行: djang-admin startproject 项目名
pycharm file ——》 new project ——》 选django 填项目名称 选解释器 app01 3. 启动项目:
命令行: python manage.py runserver
pycharm 配置修改 点绿三角
4. django的配置 settings.py
1. templates 模板 路径
2. 注释csrf中间件
3. 静态文件
STATIC_URL = '/static/' # 别名
STATICFILES_DIRS=[] #静态文件的路径
4. 数据库的配置 5. APP
创建APP:
命令行: python manage.py startapp app01
pycharm tools ——》run manage.py task ——》 startapp app01 注册APP:
在settings.py中的INSTALLED_APPS添加:
'app01' 或者 'app01.apps.App01Config',
6. views.py 写你的函数 业务逻辑
默认参数 request 请求相关内容
request:
request.method 请求方法 GET/POST
request.POST post请求提交的数据 字典
request.GET GET请求URL上携带的参数 基础必备三件套:
from django.shorcuts import HttpResponse,render,redirect
HttpResponse('返回的字符串') ——》 页面显示的内容
render(request,'HTML文件名') ——》返回一个HTML文件
redirect('跳转的URL') ——》告诉浏览器向另一个URL发请求 7. ORM
1. 对象和关系型数据的映射 通过操作对象的方式来操作数据库 2. 映射关系:
类 ——》 数据表
对象 ——》数据行
属性 ——》 字段 3. ORM功能:
操作数据表
操作数据行 4. mysql数据库:
1. 创建mysql数据库
2. 配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 引擎
'NAME': 'day60', # 数据库名字
'HOST': '127.0.0.1', # host地址
'PORT': 3306, # 端口号
'USER': 'root', # 用户名
'PASSWORD': '', # 密码
}
}
3. 告诉django使用pymysql来连数据库:
在项目同名的文件下的__init__.py中写下面的代码:
import pymysql
pymysql.install_as_MySQLdb()
4. 在app01/models.py中写类(继承models.Model):
class Userinfo(models.Model):
user = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
5. 执行两条数据库迁移的命令:
python manage.py makemigrations ——》 models变更情况记录到APP下的migrations文件夹下
python manage.py migrate ——》把所有的变更更新到数据库中 6. ORM操作:
from app01 import models
# 查询所有的对象
models.Userinfo.objects.all()
# 获取一个对象。如果查不到或者查到多个就会报错。
models.Userinfo.objects.get(user='alex',pwd='alexdsb')
# 创建一个对象
models.Userinfo.objects.create(user='alex',pwd='alexdsb') 8. form表单
1. method='post' action='' 提交方式 提交地址
2. input标签都有name属性
3. 一个type='submit' 的按钮或者input标签 (bootstrap的button按钮默认有提交事件)
今日内容:
1.单表的增删改查
课上笔记
django简单的出版社网站展示,添加,删除,编辑
展示函数和html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>出版社列表</title>
<style>
html{
user-select: none;
}
</style>
</head>
<body>
<table border="1" style="border-collapse: collapse;" cellpadding="5" bgcolor="#f0f8ff">
<thead>
<tr>
<th>序号</th>
<th>ID</th>
<th>名称</th>
<th colspan="2">操作</th>
</tr>
</thead>
<tbody>
{% for publisher in publishers %}
<tr>
<td>{{forloop.counter}}</td>
<td>{{ publisher.id }}</td>
<td>{{ publisher.name }}</td>
<td>
<a href="/del_publisher/?id={{ publisher.id }}">
<button>删除</button>
</a>
</td>
<td>
<a href="/edit_publisher/?id={{ publisher.id }}">
<button>编辑</button>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="/add_publisher/">添加一个出版社</a>
<p style="color: red">{{ err_msg }}</p>
</body>
</html>
publisher_list.html
def publisher_list(request):
publishers = models.publisher.objects.all().order_by('id')
return render(request,'publisher_list.html', {'publishers': publishers})
添加:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加出版社</title>
</head>
<body>
<h1>添加出版社</h1>
<form action="" method="post">
<input type="text" name="name">
<p style="color: red;">{{ err_msg }}</p>
<button>提交</button> </form>
</body>
</html>
add_publisher.html
def add_publisher(request):
err_msg = '' if request.method == "POST":
new_name = request.POST.get('name')
if new_name:
name = models.publisher.objects.filter(name=new_name)
if not name:
models.publisher.objects.create(name=new_name)
return redirect('/publisher/') else:
err_msg = '数据已存在!'
else:
err_msg = '数据为空!'
return render(request, 'add_publisher.html', {"err_msg": err_msg})
add_publisher
删除:
def del_publisher(request):
err_msg = ''
del_id = request.GET.get('id')
del_obj_list = models.publisher.objects.filter(id=del_id)
if del_obj_list:
del_obj_list.delete()
return redirect('/publisher/')
else:
err_msg = '您要删除的数据不存在!'
return render(request, 'publisher_list.html', {"err_msg": err_msg})
del_publisher
编辑:
def edit_publisher(request):
err_msg = ''
edit_id = request.GET.get('id')
edit_obj_list = models.publisher.objects.filter(id=edit_id)
if request.method=='POST':
new_name = request.POST.get('name')
edit_name_list = models.publisher.objects.filter(name=new_name)
if not edit_name_list and edit_obj_list and new_name:
edit_obj_list[0].name = new_name
edit_obj_list[0].save()
return redirect('/publisher/')
elif not edit_obj_list:
err_msg = '您要修改的数据不存在!'
elif not new_name:
err_msg = '修改后名字不能为空'
else:
err_msg = '数据库已存在该名称'
return render(request, 'edit_publisher.html', {"err_msg": err_msg})
edit_publisher
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>编辑出版社</title>
</head>
<body>
<h1>编辑出版社</h1>
<form action="" method="post">
<input type="text" name="name">
<p style="color: red;">{{ err_msg }}</p>
<button>提交</button> </form>
</body>
</html>
edit_publisher.html
python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)的更多相关文章
- Django学习笔记(10)——Book单表的增删改查页面
一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...
- django模型层 关于单表的增删改查
关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...
- Python全栈开发:django网络框架(一)
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- python 全栈开发,Day107(CRM初始,权限组件之权限控制,权限系统表设计)
一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销 ...
- python开发mysql:mysql安装(windows)&密码找回&存储引擎简介&库表的增删改查
一,mysql安装 下载地址 https://dev.mysql.com/downloads/file/?id=471342 解压后,将目录C:\mysql-5.7.19-winx64\bin添加到计 ...
- Django中对单表的增删改查
之前的简单预习,重点在后面 方式一: # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.objects.creat ...
- django 利用ORM对单表进行增删改查
牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...
- Django学习笔记--数据库中的单表操作----增删改查
1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...
- day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)
前情提要 Django 已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...
随机推荐
- CF 1138F 超级有意思的一道交互题QVQ
题意 有一张有向图,由一条长度为 T 的链和一个长度为 C 环组成,但是你并不知道 T 和 C 是多少 图的出发点在链的一段,终点在链的另一端,同时终点与一个环相连,大概有点内向树感觉 现在有 10 ...
- backtrace和backtrace_symbols
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的. 在glibc ...
- 如何在eclipse中对项目进行重新编译
有时由于eclipse异常关闭,当我们重启Eclipse,在启动项目时,会报错,说:ClassNotFound类似的错误,引起这种问题的原因可能是由于,Eclipse异常关闭引起的. 解决:在一个项目 ...
- 29)django-ORM连表结构
连表结构 一对多:models.ForeignKey(其他表) 多对多:models.ManyToManyField(其他表) 一对一:models.OneToOneField(其他表) 应用场景: ...
- HTML_1
HTML 指的是超文本标记语言: HyperText Markup LanguageHTML 不是一种编程语言,而是一种标记语言标记语言是一套标记标签 (markup tag)HTML 使用标记标签来 ...
- java学习——异常处理
类 Throwable类 Java 语言中所有错误或异常的超类.只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw语句抛出.类似地,只有此类 ...
- 什么是java序列化,如何实现java 序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化. 可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是为了解决在对对象流进行读写操作时所引发的问题. ...
- 【转】Python学习路线
Python最佳学习路线图 python语言基础 (1)Python3入门,数据类型,字符串 (2)判断/循环语句,函数,命名空间,作用域 (3)类与对象,继承,多态 (4)tkinter界面编程 ( ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- js去除空格12种方法
注:本文非本人原著:原文作者: 黄卉 <js去除空格12种方法> //JS去除空格的方法目前共有12种: //实现1 String.prototype.trim = function() ...