python-ORM写图书管理系统

步骤

1.创建一个新django项目
2.初始化环境
创建app,
注册app,
注释中间件验证 'django.middleware.csrf.CsrfViewMiddleware',
填写数据库连接信息
创建静态文件目录static(可省略)

__init__.py导入数据库连接模块
import pymysql
pymysql.install_as_MySQLdb()

models.py创建数据库press
from django.db import models
class Press(models.Model):
    #id主键
    id = models.AutoField(primary_key=True)
    #出版社名称
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name

在Terminal窗口执行数据库迁移的命令:
    python manage.py makemigrations
    python manage.py migrate 

prcharm连接mysql,写入测试数据

展示出版社信息

views.py
from app01.models import Press
#出版社列表
def press(request):
    # 1,去数据库查所有的出版社(order_by从大到小排序)
    ret = Press.objects.all().order_by('id')
    print(ret)
    print(ret[0])
    print(ret[0].name)
    # 2,在HTML页面上展示出来
    return render(request,'press.html',{'ret':ret})
    # return HttpResponse('ok')


press.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>出版社</title>
</head>
<body>
<table border="1">
    <thead>
    <tr>
        <th>id</th>
        <th>名称</th>
    </tr>
    </thead>
    <tbody>
    {% for i in ret %}
            <tr>
{#                <td>{{ forloop.counter }}</td>#}
                <td>{{ i.id }}</td>
                <td>{{ i.name }}</td>
            </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>


models.py
class Press(models.Model):
    #id主键
    id = models.AutoField(primary_key=True)
    #出版社名称
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name


urls.py
urlpatterns = [
....
    url(r'^press/', views.press),   #展示
]

添加出版社

urls.py
urlpatterns = [
....
    url(r'^add_press/', views.add_press),   #添加

]


views.py
from app01.models import Press
#添加出版社的处理函数
def add_press(request):
    if request.method =='POST':
    # 表示用户填写完了,要给我发送数据
    # 1,取到用户填写的出版社数据
        press_name = request.POST.get('name')
        Press.objects.create(name=press_name)
        return redirect('/press/')
    # 2,将数据添加到数据库中
    # 3,跳转到出版社列表页面
    # 1.返回一个添加页面,让用户在上边填写新的出版社信息
    return render(request,'add_press.html')


add_press.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加出版社</title>
</head>
<body>
<form action="/add_press/" method="post">
    <input type="text" name="name">
    <input type="submit">
</form>
</body>
</html>


press.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>出版社</title>
</head>
<body>
<h1>出版社列表</h1>
<a href="/add_press/">添加出版社</a>
<table border="1">
    <thead>
    <tr>
        <th>id</th>
        <th>名称</th>
    </tr>
    </thead>
    <tbody>
    {% for i in ret %}
            <tr>
{#                <td>{{ forloop.counter }}</td>#}
                <td>{{ i.id }}</td>
                <td>{{ i.name }}</td>
            </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>

删除编辑

urls.py
urlpatterns = [
....
    url(r'^del_press/', views.del_press),     #删除
    url(r'^edit_press/', views.edit_press),   #编辑

]

views.py
#删除出版社处理函数
def del_press(request):
    # 1,获取要删除的出版社ID
    del_id = request.GET.get('id')
    print(del_id)
    # 2,根据ID去数据库删除对应的数据行
    Press.objects.filter(id=del_id).delete()
    # 3,让用户在去访问以下出版社列表页
    return redirect('/press/')

#编辑出版社
def edit_press(request):
    if request.method == 'POST':
        # 用户修改完出版社给我发过来了
        # 1,取出用户编辑后的数据
        edit_id = request.POST.get('id')
        new_name = request.POST.get('name')
        # 2,去数据库修改对应的数据
        # 2.1 先找对应的数据
        edit_press_obj = Press.objects.get(id=edit_id)
        # 2.2 修改出版社的名称
        edit_press_obj.name = new_name
        # 2.3将修改同步到数据库
        edit_press_obj.save()
        # 3,让用户再去访问出版社列表页
        return redirect('/press/')

    # 1,获取要编辑的出版社id
    edit_id = request.GET.get('id')
    # 2,获取该出版社的信息
    # ret = Press.objects.filter(id=edit_id)[0]
    # print(ret)
    ret = Press.objects.get(id=edit_id)
    # 3,在页面上展示出来
    return render(request,'edit_press.html',{'press_obj':ret})

edit_press.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑出版社</title>
</head>
<body>
<h1>编辑出版社</h1>
<form action="/edit_press/" method="post">
    <input type="text" name="id" value="{{ press_obj.id }}" style="display: none;">
    <input type="text" name="name" value="{{ press_obj.name }}">
    <input type="submit">
</form>
</body>
</html>

press.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>出版社</title>
</head>
<body>
<h1>出版社列表</h1>
<a href="/add_press/">添加出版社</a>
<table border="1">
    <thead>
    <tr>
        <th>序号</th>
        <th>数据库id</th>
        <th>名称</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for i in ret %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ i.id }}</td>
                <td>{{ i.name }}</td>
                <td><a href="/del_press/?id={{ i.id }}">删除</a></td>
                <td><a href="/edit_press/?id={{ i.id }}">编辑</a></td>
            </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>


编辑方法二:
views.py
#编辑出版社
def edit_press(request):
    # 1,获取要编辑的出版社id
    edit_id = request.GET.get('id')
    if request.method == 'POST':
        # 用户修改完出版社给我发过来了
        # 1,取出用户编辑后的数据
        new_name = request.POST.get('name')
        # 2,去数据库修改对应的数据
        # 2.1 先找对应的数据
        edit_press_obj = Press.objects.get(id=edit_id)
        # 2.2 修改出版社的名称
        edit_press_obj.name = new_name
        # 2.3将修改同步到数据库
        edit_press_obj.save()
        # 3,让用户再去访问出版社列表页
        return redirect('/press/')

    # 2,获取该出版社的信息
    # ret = Press.objects.filter(id=edit_id)[0]
    # print(ret)
    ret = Press.objects.get(id=edit_id)
    # 3,在页面上展示出来
    return render(request,'edit_press.html',{'press_obj':ret})

edit_press.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑出版社</title>
</head>
<body>
<h1>编辑出版社</h1>
<form action="/edit_press/?id={{ press_obj.id }}" method="post">
    <input type="text" name="id" value="{{ press_obj.id }}" style="display: none;">
    <input type="text" name="name" value="{{ press_obj.name }}">
    <input type="submit">
</form>
</body>
</html>

 

posted @ 2019-03-28 17:21  LinuxCBB  阅读(330)  评论(0)    收藏  举报