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 :配置路由文件 参数解 ...
随机推荐
- DALSA相机开发--修改参数
DALSA gige相机有两种方式可以获取到相机相关参数,一个是读取相机里面的xml文件:另外一个是读取相对应的寄存器的值. 对于修改寄存器的值,有两个相应的函数: 1)GevSetFeatureVa ...
- 随机函数rand()和srand()
C++中随机函数rand()和srand()的用法 一.rand() 函数名: rand 功 能: 随机数发生器 用 法: int rand(void); 所在头文件: ...
- Android apk动态加载机制
参考链接:http://blog.csdn.net/singwhatiwanna/article/details/22597587
- java8 lambda方法引用
注意引用方法的参数列表与返回值类型要与函数式接口中的抽象方法的参数列表与返回值类型保持一致 主要有三种语法格式: * * 对象::实例方法名 * * 类::静态方法名 * * 类::实例方法名 pub ...
- spring3.0+Atomikos 构建jta的分布式事务
摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...
- 6)django-示例(fbv)
FBV(function base view),即一个url对应views.py一个函数 示例演示如下 1)FBV如何使用 2)渲染页面,并返回字典数据 3)字典数据页面如何访问 1)url.py f ...
- Oracle Ora 错误解决方案合集
注:本文来源于 < Oracle学习笔记 --- Oracle ORA错误解决方案 > ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发 ...
- 创建表空间、新增用户、给用户赋予DBA权限 、删除用户下的上有数据表
正文原创 一:查询数据库实例有多少用户: [oracle@localhost ~]$ sqlplus / as sysdba; SQL*Plus: Release 11.2.0.3.0 Product ...
- 【Linux】基本命令操作
一.用户操作 1.新增用户 useradd -u 1101 -g zte -d /home/xhs -m xhs --其中,1101,为用户ID,尽量使用500以上的 zte,为用户组 /home/x ...
- mysql之视图,触发器,事务等。。。
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...