当前位置:Gxlcms > 数据库问题 > Django使用表单操作数据库

Django使用表单操作数据库

时间:2021-07-01 10:21:17 帮助过:19人阅读

[ # 以上还有很多url路由,这里仅列出需要的路由 ## 利用表单增加图书,实现前台与数据库交互 url(r‘^addbook/$‘, polls_views.addbook), ]

以上url匹配地址http://127.0.0.1/addbook/,当用户访问该地址时,返回一个页面给用户。

  • 返回给用户页面bookadd.html

在views.py文件中添加方法,返回页面bookadd.html。

## 返回给用户页面bookadd.html
def addbook(request):
    return render(request, ‘bookadd.html‘)

在templates目录下新建bookadd.html文件,添加HTML代码。

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>增加图书</title>
    <script src="../js/jquery-2.1.3.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;

    </style>
</head>
<body>
    <h2>增加图书</h2>
    <h3>GET方式</h3>
    <form action="/addbooktodatabase/" method="get" name="addbook">
        <p><span>书名:</span><input type="text" placeholder="书名" name="book_name"></p>
        <p><span>作者:</span><input type="text" placeholder="作者" name="author"></p>
        <p><span>作者年龄:</span><input type="text" placeholder="作者年龄" name="author_age"></p>
        <input type="reset">&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="增加">
    </form>

    <h3>POST方式</h3>
    <form action="/addbooktodatabase/" method="post" name="addbook">
        {% csrf_token %}
         <p><span>书名:</span><input type="text" placeholder="书名" name="book_name"></p>
        <p><span>作者:</span><input type="text" placeholder="作者" name="author"></p>
        <p><span>作者年龄:</span><input type="text" placeholder="作者年龄" name="author_age"></p>
        <input type="reset">&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="增加">
    </form>

</body>
</html>

显示效果如下:
技术分享图片

  • 在用户本地页面判断操作是否合法

使用JavaScript或JQuery实现判断,这个实现方法很多,不再赘述。

  • 用户提交成功,后台传递给指定url,更新数据库

在urls.py文件中添加url路由

urlpatterns = [
    # 以上还有很多url路由,这里仅列出需要的路由
    ## 处理表单提交的数据,实现前台与数据库交互
     url(r‘^addbooktodatabase/‘, polls_views.addbooktodatabase),
]

在views.py中增加更新数据库方法

# 向图书馆增加数据GET或POST方法方法
def addbooktodatabase(request):
    # 获取参数book_name,author,author_age
    if request.method == "GET":
        book_name = request.GET["book_name"]
        author_name = request.GET["author"]
        author_age = request.GET["author_age"]
    else:
        book_name = request.POST["book_name"]
        author_name = request.POST["author"]
        author_age = request.POST["author_age"]

    ## 先增加作者信息
    from polls.models import Person
    person = Person()
    person.name = author_name
    person.age = author_age
    person.save()
    ## 增加图书信息
    from polls.models import Book
    bookadded = Book(name=book_name)
    # 保存修改
    bookadded.person_id = person.id
    bookadded.save()
    # 重定向到添加成功页面
    from django.http import HttpResponseRedirect
    return HttpResponseRedirect(‘/addok/‘)
  • 返回页面addok/html

在urls.py文件中添加url路由

urlpatterns = [
    # 以上还有很多url路由,这里仅列出需要的路由
    # 添加成功后返回添加成功页面addok
    url(r‘^addok/‘, polls_views.addok),
]

在templates目录下新建addok.html文件,添加HTML代码。

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加成功</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        a{
            text-decoration:none;
        }
    </style>
</head>
<body>
    <div>
        <p>添加图书成功</p>
        <p><a href="/addbook/">继续添加</a></p>
        <p><a href="/booklist/">查看图书列表</a></p>
    </div>
</body>
</html>

显示效果如下:

技术分享图片

  • 当用户点击“查看图书列表”时,传递bookList.html页面

bookList.html在另一篇博文中已实现,请参考:利用Django中的url方法实现地址动态拼接自动生成超链接地址

显示效果如下:
技术分享图片

可以看到,图书“水浒传已经添加成功”。

四、总结
  1. 本文完整示例:完整示例;
  2. 能力有限,欢迎指错。

注意:

  1. 这里并没有实现页面的安全检测,可自行通过JS或JQuery实现;
  2. 在接收数据时,由于GET和POST方法取值不同,需要对GET和POST方法进行判定;
  3. 为了防止恶意SQL注入,对用户输入的内容字段也应该进行检测。

Django使用表单操作数据库

标签:描述   str   sso   ace   djang   指定   方法   pad   href   

人气教程排行