基于python的种子搜索网站-开发过程

摘要:
本讲会对种子搜索网站的开发过程进行详细的讲解。本人的研究方向是一项关于搜索的研究项目。它的代码非常简单:classIndexView:template_name='app/index.html'仅仅是展示了首页页面,首页将搜索词交给了search来处理,这一点,我们从index.html关于form的代码中可以看到,提交给了url‘app:search’列表展示页从urls.py中可知,app:search指向了SearchView,这个类是本项目的核心代码,它实现了搜索的全过程。

本讲会对种子搜索网站的开发过程进行详细的讲解。

源码地址:https://github.com/geeeeeeeek/bt

项目开发过程

项目简介

该项目是基于python的web类库django开发的一套web网站,做为本人的毕业设计。
本人的研究方向是一项关于搜索的研究项目。在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和更新。 网站域名为bt.mypython.me

启动项目

django-admin startproject bt

创建应用

python3 manage.py startapp app

model设计

主要是对提交的链接进行设计,在此项目中,我们需要展示链接的名称、url、联系人、链接简介等字段。

设计字段如下:

class Link(models.Model):
list_display = ("url","desc","contact")
url = models.CharField(max_length=100,blank=True, null=True)
title = models.CharField(max_length=100,blank=True, null=True)
size = models.CharField(max_length=100,blank=True, null=True)
hot = models.IntegerField(default=0)
desc = models.CharField(max_length=200,blank=True, null=True)
contact = models.CharField(max_length=100,blank=True, null=True)
status = models.BooleanField(default=False)
timestamp = models.DateTimeField(auto_now_add=True, null=True)
objects = LinkQuerySet.as_manager()

业务编写

本项目一共分为4个页面,分别是首页、搜索列表页、详情页、链接提交页。

我们一一讲解

首页

首先是首页,它的模版位于templates/app/index.html 它主要是用来展示首页内容, 并提交搜索词,到搜索接口,所有的接口都位于app/urls.py里面,如下

app_name = 'app'
urlpatterns = [
path('index', views.IndexView.as_view(), name='index'),
path('search', views.SearchView.as_view(), name='search'),
path('detail/<int:pk>', views.DetailView.as_view(), name='detail'),
path('commit', views.CommitView.as_view(), name='commit'),
]

我们设置首页的路由为IndexView, 开始编写IndexView的代码。它的代码非常简单:

class IndexView(generic.TemplateView):
template_name = 'app/index.html'

仅仅是展示了首页页面,首页将搜索词交给了search来处理,这一点,我们从index.html关于form的代码中可以看到, 提交给了url ‘app:search’

<form   action="{% url 'app:search' %}" enctype="multipart/form-data" method="get" role="form">
<input type="text" name="q" autocomplete="off" placeholder="搜搜你懂的">
<input type="submit" value="搜 索" class="blue">
</form>

列表展示页

从urls.py中可知,app:search指向了SearchView,这个类是本项目的核心代码,它实现了搜索的全过程。

class SearchView(generic.ListView):
model = Link
template_name = 'app/search.html'
context_object_name = 'link_list'
paginate_by = 10
q = '' # 搜索词
duration = 0 # 耗时
record_count = 0

def get_context_data(self, *, object_list=None, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
paginator = context.get('paginator')
page = context.get('page_obj')
page_list = get_page_list(paginator, page)
context['page_list'] = page_list
context['q'] = self.q
context['duration'] = round(self.duration,6)
context['record_count'] = self.record_count
return context

def get_queryset(self):
start = time.time()
self.q = self.request.GET.get("q", "")
search_list = Link.objects.get_search_list(self.q)
# 如搜索为空,则放假数据
if len(search_list) <= 0:
search_list = Link.objects.get_fake_list()
end = time.time()
self.duration = end - start
self.record_count = len(search_list)
return search_list

继承了ListView通用类,通过get_queryset()回调函数来实现搜索功能,并通过get_context_data来传递额外的数据给前端。即是列表展示页。

详情页

我们再来开发详情页,从urls.py中看到,详情页是由DetailView来实现的,我们来窥探它的全貌:

class DetailView(generic.DetailView):
model = Link
template_name = 'app/detail.html'

def get_object(self, queryset=None):
obj = super().get_object()
obj.increase_hot_count()
return obj

def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
recommend_list = Link.objects.get_recommend_list()
context['recommend_list'] = recommend_list
return context

它很简单,继承了DetailView通用模板类来显示详情。

链接提交页

最后再来看一下链接提交页,它是由CommitView来实现的。同样是观看代码:

class CommitView(generic.CreateView):

model = Link
form_class = CommitForm
template_name = 'app/commit.html'

@ratelimit(key='ip', rate='2/m')
def post(self, request, *args, **kwargs):
was_limited = getattr(request, 'limited', False)
if was_limited:
messages.warning(self.request, "操作太频繁了,请1分钟后再试")
return render(request, 'app/commit.html', {'form': CommitForm()})
return super().post(request, *args, **kwargs)

def get_success_url(self):
messages.success(self.request, "提交成功! 审核期3个工作日。")
return reverse('app:commit')

它是继承自CreateView,因为是创建操作嘛,在post中,我们通过ratelimit来限制提交次数。

运行项目

python3 manage.py runserver

免责声明:文章转载自《基于python的种子搜索网站-开发过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android实现系统ROOT, 并能赋予app root权限Ftp进行文件的上传和下载下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TensorFlow的初次使用+Python画3D图和计算KL散度

ython计算KL散度import numpy as np import scipy.stats x = [np.random.randint(1,11) for i in range(10)] print(x) print(np.sum(x)) px = x/np.sum(x)#归一化 print(px) y = [np.random.randint...

Python 练习题

python 练习题 day1 1.简述变量命名规范 7条: 1.由字母,数字和下划线组成 2.name = input(“>>>”) name变量是什么数据类型通过代码检测 type 3.if条件语句的基本结构? if 条件 : print() 4.用print打印出下面内容: ⽂能提笔安天下,武能上⻢定乾坤.⼼存谋略何⼈胜,...

mac卸载python

对于 Mac 自带的 Python,其框架目录为:   System/Library/Frameworks/Python.framework 而我们安装的 Python,其(默认)框架目录为:   /Library/Frameworks/Python.framework 接下来,我们就分别(在 Mac 终端进行)删除上面所提到的三部分。   第 1 步,删...

数据采集平台DBus-基础依赖软件安装

         数据采集平台DBus-基础依赖软件安装                                      作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.准备工作 1>.DBus默认软件依赖   DBus依赖如下外部组件:    Cannal:      依赖V1.0.22版本,DBus用于实时抽取bi...

安装caffe碰到的坑(各种.so未找到)

./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: 没有那个文件或目录 所有类似于上面的错误,都可以用如下格式来解决: 解决方案:出现该错误的原因是少了依赖。 在命令行输入: $ sudo apt-get install --no-install-recommends li...

Mac下Pycharm中升级pip失败,通过终端升级pip

使用 Pycharm 使,需要下载相关的第三方包,结果提示安装失败,提示要升级 pip 版本,但是通过 Pycharm 重新安装却失败,原因可能是出在通过 Pycharm 时升级 pip 是没有权限的,所以一般在 Pycharm 中升级的时候会失败。如图所示,当点击右边新版本升级的时候,一般不会成功,这个时候我们通过命令行来解决。  打开终端,在终端输入...