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

栏目: Python · 发布时间: 5年前

内容简介:该项目是基于python的web类库django开发的一套web网站,做为本人的毕业设计。 本人的研究方向是一项关于搜索的研究项目。在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和更新。 网站域名为bt.mypython.me主要是对提交的链接进行设计,在此项目中,我们需要展示链接的名称、url、联系人、链接简介等字段。设计字段如下:

该项目是基于 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 id="search-form" action="{% url 'app:search' %}" enctype="multipart/form-data" method="get" role="form">
    <input type="text" id="search" name="q" autocomplete="off" placeholder="搜搜你懂的">
    <input type="submit" id="btnSearch" 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来限制提交次数。


以上所述就是小编给大家介绍的《基于python的种子搜索网站--开发过程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

中国创投简史

中国创投简史

投资界网站 / 人民邮电出版社 / 2017-1-1 / 55

《中国创投简史》系统梳理了自20世纪80年代开始的中国创投产业发展历程,回顾了各个时代中的代表人物、知名投资机构以及他们所创下的一个个投资奇迹。从熊晓鸽、徐新、沈南鹏等风险投资人的成长经历中,从搜狐、腾讯、百度、小米等一代代科技企业巨头的诞生与演变过程中,我们可以看到风险投资的力量、创业者的企业家精神以及科技创造伟大财富的神奇过程。 对于风险投资和私募股权行业的从业者以及有融资需求的创业者来......一起来看看 《中国创投简史》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具