Django实现数据库搜索及结果展示教程 (django搜索数据库并显示)

Django是一个强大的Python Web框架,拥有全面的开发功能和易于使用的模板语言,旨在使Web开发更加简单。其中一个强大的功能就是实现数据库搜索及结果展示。在本文中,我们将介绍Django如何实现这一功能。

1. 创建Django项目

我们需要创建一个新的Django项目。通过以下命令可以创建一个名为“myproject”的新项目:

“`

django-admin startproject myproject

“`

2. 创建Django应用程序

接下来,我们需要创建一个名为“search”的新Django应用程序。通过以下命令可以创建一个名为“search”的新应用程序:

“`

python manage.py startapp search

“`

3. 创建数据库模型

接下来,我们需要创建一个数据库模型,它将存储我们要搜索和展示的数据。在本文中,我们将创建一个简单的模型,其中包含一个名为“title”的CharField和一个名为“content”的TextField。

打开“search/models.py”,并将以下代码添加到文件中:

“`

from django.db import models

class Post(models.Model):

title = models.CharField(max_length=200)

content = models.TextField()

def __str__(self):

return self.title

“`

在这里,我们创建了一个名为“Post”的模型,并定义了“title”和“content”两个字段。然后,我们覆盖了“__str__”方法,以便在对象的字符串表示中返回“title”字段的值。

4. 迁移数据库

接下来,我们需要迁移数据库以创建我们的新模型。通过以下命令可以完成迁移:

“`

python manage.py makemigrations

python manage.py migrate

“`

5. 创建数据

接下来,我们需要创建一些数据,以便在我们的搜索和结果展示中使用。打开“search/admin.py”文件,并将以下代码添加到文件中:

“`

from django.contrib import admin

from .models import Post

admin.site.register(Post)

“`

在这里,我们注册了我们创建的“Post”模型。这将创建一个名为“Posts”的链接,我们可以在其中创建、编辑和删除Post对象。

现在,我们可以通过打开Django管理界面(http://127.0.0.1:8000/admin/)来创建一些数据。单击“Posts”链接,然后单击“Add”按钮。在这里,您可以输入“title”和“content”字段的值。创建数据之后,我们可以继续实现搜索的代码。

6. 创建搜索表单

为了实现搜索,我们需要创建一个搜索表单。在“search”应用程序中创建一个名为“forms.py”的新文件,并将以下代码添加到文件中:

“`

from django import forms

class SearchForm(forms.Form):

query = forms.CharField()

“`

在这里,我们创建了一个名为“SearchForm”的表单,并定义了一个名为“query”的CharField。该表单将请求一个查询字符串,我们将使用这个查询字符串在数据库中搜索匹配的Post对象。

7. 创建搜索视图

接下来,我们需要创建一个搜索视图,它将处理从搜索表单POST的查询字符串并返回匹配的Post对象。在“search”应用程序中创建一个名为“views.py”的新文件,并将以下代码添加到文件中:

“`

from django.shortcuts import render

from .models import Post

from .forms import SearchForm

def search(request):

form = SearchForm(request.POST or None)

results = []

if request.method == ‘POST’ and form.is_valid():

query = form.cleaned_data[‘query’]

results = Post.objects.filter(title__icontns=query)

return render(request, ‘search.html’, {‘form’: form, ‘results’: results})

“`

在这里,我们定义了一个名为“search”的视图,它将处理从搜索表单POST的查询字符串,并在数据库中查找匹配的Post对象。

视图首先创建了一个名为“form”的SearchForm对象,并将其与请求的POST数据绑定。然后,我们创建了一个名为“results”的空列表。

如果请求的方法是POST并且表单有效,则我们通过查询字符串过滤Post对象并将其存储在“results”中。

视图使用“search.html”模板呈现响应。我们将在下一步中创建这个模板。

8. 创建搜索模板

我们需要创建一个名为“search.html”的模板,它将呈现搜索表单和搜索结果。在“search/templates”文件夹中创建一个新文件夹,并将其命名为“search”。在“search/templates/search”中创建一个名为“search.html”的新文件,并将以下代码添加到文件中:

“`

{% extends ‘base.html’ %}

{% block content %}

Search

{% csrf_token %}

{{ form.as_p }}

{% if results %}

Results

    {% for result in results %}

  • {{ result.title }}
  • {% endfor %}

{% endif %}

{% endblock %}

“`

在这里,我们使用Django模板继承机制扩展了名为“base.html”的基本模板。然后,我们在模板中添加了一个名为“content”的块,其中包含一个搜索表单和一个名为“results”的结果列表。

表单使用POST方法提交到名为“search”的URL。用于生成表单代码的“{{ form.as_p }}”模板标记用于在页面上呈现它。我们在“{% if results %}”行上检查是否有结果,并在页面上呈现它们。

9. 呈现搜索输出

现在,我们可以启动开发服务器并在浏览器中导航到http://127.0.0.1:8000/search/,以实际查看搜索功能。输入要搜索的查询字符串并单击“Search”按钮。

如果存在匹配的Post对象,则它们将在页面上列表中显示出来。否则,将显示一个空列表。

在本文中,我们演示了如何使用Django实现数据库搜索功能。我们创建了一个Django项目和应用程序,定义了一个简单的数据库模型,并使用Django管理界面创建了一些示例数据。接下来,我们创建了一个搜索表单和一个搜索视图来处理用户查询,并使用Django模板呈现搜索结果。通过这个实现,我们可以轻松地为Django应用程序添加强大的搜索功能。

相关问题拓展阅读:

django怎么现实数据库了里的图片?

数据库里只厅桐存对应的照片地址啦···· 比如 upload/images/.jpg P页面就这样显示咯 <img src="” align=”center”>” alt=”images”/>

django 怎么查询mongodb数据

清单 1. 您可以尝试对 MongoDB 使用的样例 JavaScript 命令

var x = “0”;

x === 0;

typeof({});

您不必成为一名 JavaScript 专家之后才开始使用 MongoDB;这里提供几个有用的概念:

您可以使用对象字面量语法 (object literal syntax) 创建对象,换句话说,会使用两个花括号(如 var myCollection = {};)。

您可以使用方括号()来创建数组。

除了数字、布尔值、null 和未定义值以外,JavaScript 中的其他所有值都是一个对象。

如果您想要了解关于 JavaScript 其他特性的更多信息,比如原型的面向对象的编程 (OOP)、范围规则,及其函数式编程特性,请参阅 参考资料。

MongoDB 是一种无模式数据库,与关系型数据库完全相反。无模式数据颤握库没有使用表格,而是使用由文档组成的。这些文档是使用对象字面量语法创建的,如 清单 2 所示。

清单 2. 文档创建示例

var person1 = {name:”John Doe”, age:25};

var person2 = {name:”Jane Doe”贺洞烂, age:26, dept: 115};

现在,请执行 清单 3 中所示的命令来创建一个新。

清单 3. 创建

db.employees.save(person1);

db.employees.save(person2);

由于 MongoDB 具有无模式特性,所以 person1 和 person2 不必具有相同的列类型,甚至不必拥有相同的列编号。并且,MongoDB 本身具有动态特性,所以它会创建 employees 而不是抛出一个错误。您可以通过 find() 方法检索文档。要获取 employees 中的所有文档,可以直接调用 find(),无需使用任何参数,如 清单 4 所示。

清单 4. 一个简单的 MongoDB 查询

> db.employees.find();

// returns

{ “_id” : { “$oid” : “4e363c4dcc93747e68055fa1” },

“name” : “John Doe”, “age” : 25 },

{ “_id” : { “$oid” : “4e363c53cc93747e68055fa2” },

“name” : “Jane Doe”, “dept” : 115, “age” : 26 }

>

注意,_id 等效于一个主键。要运行具体的查询,则需要使用键/值对传递另一个对象来指示您所要查询的内容,如 清单 5 所示。

清单 5. 通过一个搜索参数进行查询

> db.employees.find({name: “John Doe”});

/禅漏/ returns

{ “_id” : { “$oid” : “4e363c4dcc93747e68055fa1” },

“name” : “John Doe”, “age” : 25 }

>

要查询年龄大于 25 岁的员工,请执行 清单 6 中的命令。

清单 6. 查询年龄大于 25 岁的员工

> db.employees.find({age:{‘$gt’:25}});

// returns

{ “_id” : { “$oid” : “4e363c53cc93747e68055fa2” },

“name” : “Jane Doe”, “dept” : 115, “age” : 26 }

>

$gt 是一个特殊操作符,表示大于。表 1 列出了其他修饰符。

表 1. 可以对 MongoDB 使用的修饰符

修饰符

描述

$gt 大于

$lt 小于

$gte 大于或等于

$lte 小于或等于

$in 检查某个数组是否存在,类似于 ‘in’ SQL 操作符。

当然,您也可以使用 update() 方法更新记录。您可以更新整条记录,如 清单 7 所示。

清单 7. 更新整条记录

> db.employees.update({

name:”John Doe”, // Document to update

{name:”John Doe”, age:27} // updated document

});

此外,您还可以使用 $set 操作符仅更新一个值,如 清单 8 所示。

清单 8. 仅更新记录中的一个值

> db.employees.update({name:”John Doe”,

{ ‘$set’: {age:27} }

});

要清空,可以调用 remove() 方法,无需使用任何参数。例如,如果您想要从 employees 中移除 John Doe,那么您可以执行 清单 9所示的操作。

清单 9. 从 employees 中移除 John Doe

> db.employees.remove({“name”:”John Doe”});

> db.employees.find();

// returns

{ “_id” : { “$oid” : “4e363c53cc93747e68055fa2” }, “name” : “Jane Doe”,

“dept” : 115, “age” : 26 }

>

此内容对于刚开始使用 MongoDB 的您来说已经足够了。当然,您可以继续浏览官方网站,该网站提供了简洁的、基于 Web 的交互式 mongodb 命令提示符,以及指南和官方文档。请参阅 参考资料。

回页首

将 Django 与 MongoDB 集成

有几个从 Python 或 Django 访问 MongoDB 的选项。之一个选项是使用 Python 模块,即 PyMongo。清单 10 是一个简单的 PyMongo 会话,假设您已经安装了 MongoDB,并且已经拥有一个在端口上运行的实例。

清单 10. 样例 PyMongo 会话

from pymongo import Connection

databaseName = “sample_database”

connection = Connection()

db = connection

employees = db

person1 = { “name” : “John Doe”,

“age” : 25, “dept”: 101, “languages”: }

person2 = { “name” : “Jane Doe”,

“age” : 27, “languages”: }

print “clearing”

employees.remove()

print “saving”

employees.save(person1)

employees.save(person2)

print “searching”

for e in employees.find():

print e + ” ” + unicode(e)

PyMongo 允许您同时运行多个数据库。要定义一个连接,只需将数据库名字传递给连接实例。在本例中,Python 词典代替了 JavaScript 对象字面量来创建新文档定义,而 Python 列表代替了 JavaScript 数组。find 方法会返回一个您可以进行迭代的数据库游标对象。

语法的简易性使 MongoDB 命令行与包含 PyMongo 的运行命令之间的切换变得容易。例如,清单 11 展示了如何使用 PyMongo 运行一个查询。

清单 11. 使用 PyMongo 运行一个查询

for e in employees.find({“name”:”John Doe”}):

print e

您从 Python 调用 MongoDB 的另一个选项是 MongoEngine,如果您使用过 Django 的内置 ORM,那么您对此应该感到非常熟悉。MongoEngine 是一个文档到对象的映射器,从概念上说,它与映射到 ORM 的映射器类似。清单 12 显示了一个使用 MongoEngine 的示例会话。

清单 12. MongoEngine 示例会话

from mongoengine import *

connect(’employeeDB’)

class Employee(Document):

name = StringField(max_length=50)

age = IntField(required=False)

john = Employee(name=”John Doe”, age=25)

john.save()

jane = Employee(name=”Jane Doe”, age=27)

jane.save()

for e in Employee.objects.all():

print e, e, e

Employee 对象继承自 mongoengine.Document。在本示例中,使用了两种字段类型:StringField 和 IntField。与 Django 的 ORM 相似,要通过查询获得中的所有文档,请调用 Employee.objects.all()。请注意,要访问惟一的对象 ID,请使用 “id” 而非 “_id”。

回页首

一个样例博客

现在要创建一个名为 Blongo 的简单博客。您将使用 Python 1.7、Django 1.3、MongoDB 1.8.2、MongoEngine 0.4 和 Hypertext Markup Language (HTML) 5。如果您想要重现我的精确设置,我习惯使用 Ubuntu Linux 和 FireFox。Blongo 在网页加载后就会显示所输入的所有博客条目,并且允许对任何条目执行更新和删除操作,换句话说,允许进行所有的标准 CRUD 操作。Django 视图拥有三个方法:index、update 和delete。

层叠样式表 (CSS) 定义被引入一个单独的静态文件。相关内容我不想在此处赘述,您可以随意浏览 下载 部分中包含的源代码。

假设已安装好所需的所有工具,并且这些组件都能良好运行,那么请创建一个新的 Django 项目和必要的组件,如 清单 13 所示。

清单 13. 创建 Django 博客项目的命令

$ django-admin.py startproject blongo

$ cd blongo

$ django-admin.py startapp blogapp

$ mkdir templates

$ cd blogapp

$ mkdir static

Django里面怎么实现数据库视图啊 就是虚拟表

自带的认证功能确实很好,但我没明白你迟贺所说的admin是自己写的是什么意思,而且用户认证这块东西很多,不兆穗知从何讲族旦卜起 if request.user.is_authenticated(): # 认证的用户 else: #!

关于django搜索数据库并显示的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Django实现数据库搜索及结果展示教程 (django搜索数据库并显示)