python框架之Django(2)-简单的CRUD
2024-08-26 22:27:14
写一个简单的项目小例子来了解Django中的O/RM操作
前戏
创建app
#在Django项目根目录下执行
python3 manage.py startapp [app name]
配置数据库连接信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
'HOST': '127.0.0.1', # 连接数据库的地址
'PORT': 3306, # 端口
'NAME': "testdb", # 数据库名称
'USER': 'root', # 用户
'PASSWORD': 'root' # 密码
}
}
/[project name]/settings.py->DATABASES节
让Django用pymysql来代替默认的MySQLdb
import pymysql
pymysql.install_as_MySQLdb()
/[project name]/__init__.py
让项目'知道'APP
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login_app.apps.LoginAppConfig'
]
/[project name]/settings.py->INSTALLED_APPS节
表关系
代码
创建模型
在app下面的models.py文件中定义类,这些类必须继承models.Model
from django.db import models class Press(models.Model):
'''
出版社
'''
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50, unique=True) class Book(models.Model):
'''
书籍
'''
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50, unique=True)
press = models.ForeignKey(Press) class Author(models.Model):
'''
作者
'''
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50, unique=True)
book = models.ManyToManyField(Book)
/[app name]/models.py
执行命令
python3 manage.py makemigrations # 对比模型和db的差异,记录下将要发生的变更
python3 manage.py migrate # 将记录的变更在数据库中执行
CRUD操作
出版社(一对多)
from django.shortcuts import render, HttpResponse, redirect
from bookapp import models def add(request):
'''
添加
'''
if request.method == 'POST':
name = request.POST.get('name')
models.Press.objects.create(name=name).save()
return redirect('/list_press/')
return render(request, 'press/add.html') def list(request):
'''
列表
'''
all_list = models.Press.objects.all()
return render(request, 'press/list.html', {'list': all_list}) def edit(request):
'''
编辑
'''
if request.method == 'POST':
id = request.POST.get('id')
name = request.POST.get('name')
obj = models.Press.objects.get(id=id)
obj.name = name
obj.save()
return redirect('/list_press/')
id = request.GET.get('id')
obj = models.Press.objects.get(id=id)
return render(request, 'press/edit.html', {'press': obj}) def delete(request):
'''
删除
'''
id = request.GET.get('id')
models.Press.objects.get(id=id).delete()
return redirect('/list_press/')/[app name]/service/press.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加出版社</title>
</head>
<body>
<form action="/add_press/" method="post">
<p>名称:<input name="name" type="text"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>/templates/press/add.html 添加出版社页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>出版社列表</title>
</head>
<body>
<a href="/add_press/">添加</a>
<table border="1" style="border-collapse:collapse;">
<tr>
<td>序号</td>
<td>名称</td>
<td>拥有书籍</td>
<td colspan="2">操作</td>
</tr>
{% for press in list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ press.name }}</td>
<td>{% for book in press.book_set.all %}
{% if forloop.counter == press.book_set.all.count %}
{{ book.name }}
{% else %}
{{ book.name }},
{% endif %}
{% endfor %}</td>
<td><a href="/edit_press/?id={{ press.id }}">编辑</a></td>
<td><a href="/del_press/?id={{ press.id }}">删除</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>/templates/press/list.html 出版社列表页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改出版社</title>
</head>
<body>
<form action="/edit_press/" method="post">
<input type="hidden" name="id" value="{{ press.id }}">
<p>名称:<input name="name" type="text" value="{{ press.name }}"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>/templates/press/edit.html 编辑出版社页
书籍(多对一&多对多)
from django.shortcuts import render, HttpResponse, redirect
from bookapp import models def add(request):
'''
添加
'''
if request.method == 'POST':
press_id = request.POST.get('press_id')
name = request.POST.get('name')
models.Book.objects.create(name=name, press_id=press_id).save()
return redirect('/list_book/')
press_list = models.Press.objects.all()
return render(request, 'book/add.html', {'press_list': press_list}) def list(request):
'''
列表
'''
all_list = models.Book.objects.all()
return render(request, 'book/list.html', {'list': all_list}) def edit(request):
'''
编辑
'''
if request.method == 'POST':
id = request.POST.get('id')
name = request.POST.get('name')
press_id = request.POST.get('press_id')
obj = models.Book.objects.get(id=id)
obj.name = name
obj.press_id = press_id
obj.save()
return redirect('/list_book/')
id = request.GET.get('id')
obj = models.Book.objects.get(id=id)
press_list = models.Press.objects.all()
return render(request, 'book/edit.html', {'book': obj, 'press_list': press_list}) def delete(request):
'''
删除
'''
id = request.GET.get('id')
models.Book.objects.get(id=id).delete()
return redirect('/list_book/')/[app name]/service/book.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加书籍</title>
</head>
<body>
<form action="/add_book/" method="post">
<p>名称:<input name="name" type="text"></p>
<p>出版社: <select name="press_id" >
{% for press in press_list %}
<option value="{{ press.id }}">{{ press.name }}</option>
{% endfor %}
</select></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>/templates/book/add.html 添加书籍页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书籍列表</title>
</head>
<body>
<a href="/add_book/">添加</a>
<table border="1" style="border-collapse:collapse;">
<tr>
<td>序号</td>
<td>名称</td>
<td>出版社</td>
<td colspan="2">操作</td>
</tr>
{% for book in list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ book.name }}</td>
<td>{{ book.press.name }}</td>
<td><a href="/edit_book/?id={{ book.id }}">编辑</a></td>
<td><a href="/del_book/?id={{ book.id }}">删除</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>/templates/book/list.html 书籍列表页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改书籍</title>
</head>
<body>
<form action="/edit_book/" method="post">
<input type="hidden" name="id" value="{{ book.id }}">
<p>名称:<input name="name" type="text" value="{{ book.name }}"></p>
<p>出版社:
<select name="press_id">
{% for press in press_list %}
{% if book.press.id == press.id %}
<option selected value="{{ press.id }}">{{ press.name }}</option>
{% else %}
<option value="{{ press.id }}">{{ press.name }}</option>
{% endif %}
{% endfor %}
</select>
</p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>/templates/book/edit.html 编辑书籍页
作者(多对多)
from django.shortcuts import render, HttpResponse, redirect
from bookapp import models def add(request):
'''
添加
'''
if request.method == 'POST':
book_id_list = request.POST.getlist('book_id_list')
print(book_id_list)
name = request.POST.get('name')
author = models.Author.objects.create(name=name)
author.book = book_id_list
author.save()
return redirect('/list_author/')
book_list = models.Book.objects.all()
return render(request, 'author/add.html', {'book_list': book_list}) def list(request):
'''
列表
'''
all_list = models.Author.objects.all()
return render(request, 'author/list.html', {'list': all_list}) def edit(request):
'''
编辑
'''
if request.method == 'POST':
id = request.POST.get('id')
name = request.POST.get('name')
book_id_list = request.POST.getlist('book_id_list')
obj = models.Author.objects.get(id=id)
obj.name = name
obj.book = book_id_list
obj.save()
return redirect('/list_author/')
id = request.GET.get('id')
obj = models.Author.objects.get(id=id)
book_list = models.Book.objects.all()
return render(request, 'author/edit.html', {'author': obj, 'book_list': book_list}) def delete(request):
'''
删除
'''
id = request.GET.get('id')
models.Author.objects.get(id=id).delete()
return redirect('/list_author/')/[app name]/service/author.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加作者</title>
</head>
<body>
<form action="/add_author/" method="post">
<p>姓名:<input name="name" type="text"></p>
<p>拥有书籍: <select name="book_id_list" multiple>
{% for book in book_list %}
<option value="{{ book.id }}">{{ book.name }}</option>
{% endfor %}
</select></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>/templates/author/add.html 添加作者页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>作者列表</title>
</head>
<body>
<a href="/add_author/">添加</a>
<table border="1" style="border-collapse:collapse;">
<tr>
<td>序号</td>
<td>姓名</td>
<td>拥有书籍</td>
<td colspan="2">操作</td>
</tr>
{% for author in list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ author.name }}</td>
<td>{% for book in author.book.all %}
{% if forloop.counter == author.book.count %}
{{ book.name }}
{% else %}
{{ book.name }},
{% endif %}
{% endfor %}
</td>
<td><a href="/edit_author/?id={{ author.id }}">编辑</a></td>
<td><a href="/del_author/?id={{ author.id }}">删除</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>/templates/author/list.html 作者列表页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改作者</title>
</head>
<body>
<form action="/edit_author/" method="post">
<input type="hidden" name="id" value="{{ author.id }}">
<p>姓名:<input name="name" type="text" value="{{ author.name }}"></p>
<p>拥有书籍:
<select name="book_id_list" multiple>
{% for book in book_list %}
{% if book in author.book.all %}
<option selected value="{{ book.id }}">{{ book.name }}</option>
{% else %}
<option value="{{ book.id }}">{{ book.name }}</option>
{% endif %}
{% endfor %}
</select>
</p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>/templates/author/edit.html 编辑作者页
配置路由
from django.shortcuts import render, HttpResponse, redirect
from bookapp.service import press
from bookapp.service import book
from bookapp.service import author
/[app name]/views.py
from django.conf.urls import url
from django.contrib import admin from django.conf.urls import url
from bookapp import views
urlpatterns = [
url(r'^add_press/', views.press.add),
url(r'^list_press/', views.press.list),
url(r'^edit_press/', views.press.edit),
url(r'^del_press/', views.press.delete),
url(r'^add_book/', views.book.add),
url(r'^list_book/', views.book.list),
url(r'^edit_book/', views.book.edit),
url(r'^del_book/', views.book.delete),
url(r'^add_author/', views.author.add),
url(r'^list_author/', views.author.list),
url(r'^edit_author/', views.author.edit),
url(r'^del_author/', views.author.delete),
]
/[project name]/urls.py
最新文章
- Oracle Hints详解
- openstack快速封装镜像
- Gephi可视化(二)——Gephi Toolkit叫板Prefuse
- Windows Server 2016正式版14393英文版ISO镜像下载:_X64FRE_ZH-CN.ISO
- 【转】Linux IO实时监控iostat命令详解
- vi编辑器常用配置
- poj 2245 Lotto
- 统一使用GPT分区表,安装MAC 10.10 和 Win8.1 pro双系统
- jdk、jre、jvm的关系
- WinJS.Binding.List与kendo.data.ObservableArray
- Log4Net使用指南(转)
- 标准SVD和改进的SVD
- 关于Android WebView上传文件的解决方案
- 学Java的前景与就业,资深程序员教你怎么开始学Java!
- 扫描工具nmap介绍
- 新浪短连接API免登陆免认证实例
- kinect 深度图与彩色图对齐程序
- C语言函数指针与 c#委托和事件对比
- file 文件上传,下载,删除
- Centos6.6搭建Maven私服