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

网站演示: https://bt.mypython.me

源码地址: 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 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 = Linktemplate_name = 'app/search.html'context_object_name = 'link_list'paginate_by = 10q = ''       # 搜索词duration = 0 # 耗时record_count = 0def 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_listcontext['q'] = self.qcontext['duration'] = round(self.duration,6)context['record_count'] = self.record_countreturn contextdef 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 - startself.record_count = len(search_list)return search_list

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

详情页

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

class DetailView(generic.DetailView):model = Linktemplate_name = 'app/detail.html'def get_object(self, queryset=None):obj = super().get_object()obj.increase_hot_count()return objdef get_context_data(self, **kwargs):context = super(DetailView, self).get_context_data(**kwargs)recommend_list = Link.objects.get_recommend_list()context['recommend_list'] = recommend_listreturn context

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

链接提交页

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

class CommitView(generic.CreateView):model = Linkform_class = CommitFormtemplate_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的种子搜索网站(二)开发过程相关推荐

  1. python开发微信订阅号如何申请_基于Python的微信公众平台二次开发(Python常用框架、订阅号开发、公众号开发)...

    1.1.课程的背景 微信公众平台的火热程度已经不用多言,无论是个人还是企业,政府还是商家,都已经开始搭建微信公众平台,微信的作用已经被各界人士认可.微信公众平台的技术需求市场缺口巨大.同时python ...

  2. 基于Python的新闻聚合网站设计与实现

    摘 要:本论文研究内容是基于Python的爬虫网络设计,利用Python的Scrapy的框架搭建爬虫网络,并设计一个全新的新闻网站,网站实现对新闻数据的分类,以及用户对新闻的分享.评论等,且本论题设计 ...

  3. 基于python和线上网站wordart的词云生成

    词云生成 前言 一.词云是什么? 二.使用步骤 1.使用jieba提取关键词 2.进入网站 3.导入关键词 4.导入字体 5.生成词云 6.词云调整 总结 前言 随着人工智能的不断发展,python这 ...

  4. 基于python的电商网站建设_基于Django的电子商务网站开发

    Python的安装 目前市场上Python 2.X系列与Python 3.X系列共存的现象.读者可以安装Python 2.X系列或者Python 3.X系列.如果开发的目的是基于原有Python 2. ...

  5. 基于Python 实现企业搜索系统(信息检索)【100010418】

    信息检索实验三:企业搜索系统的设计与实现 1 实验目的 本次实验目的是对企业检索系统的设计与实现过程有一个全面的了解.本次实验设计的内容包括:对数据建立索引,实现文档的搜索,并对检索结果排序:实现企业 ...

  6. 计算机毕业设计django基于python的宠物分享网站

    项目介绍 本论文主要论述了如何使用Python技术开发一个宠物分享网站,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述宠物分享网站的 ...

  7. 计算机毕业设计django基于python的宠物分享网站(源码+系统+mysql数据库+Lw文档)

    项目介绍 本论文主要论述了如何使用Python技术开发一个宠物分享网站,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述宠物分享网站的 ...

  8. python爬取素材图片代码_基于Python爬取素材网站音频文件

    基本环境配置 python 3.6 pycharm requests parsel 相关模块pip安装即可 目标网页 请求网页 import requests url = 'https://www.t ...

  9. python爬取收费素材_基于Python爬取素材网站音频文件

    基本环境配置SUW免费资源网 python 3.6 pycharm requests parsel 相关模块pip安装即可SUW免费资源网 SUW免费资源网 目标网页SUW免费资源网 SUW免费资源网 ...

最新文章

  1. 室外声音信标可行性分析
  2. 机器学习:多分类的logistic回归
  3. 爱数应用容灾部署方案三
  4. ×××技术详解(全)
  5. 什么是ip地址、子网掩码、网关和DNS?
  6. react-native 项目实战 -- 新闻客户端(6) -- 完善ListView头部视图
  7. sql 在某段时间_解Bug之路记一次中间件导致的慢SQL排查过程
  8. Linux OpenSSH后门的添加与防范
  9. 第一次做APP接口开发过程总结
  10. 我的编程之路——VB篇
  11. 线性分类器和非线性分类器总结
  12. PDF如何编辑,怎么删除PDF页眉页脚
  13. TARA-汽车安全概念
  14. 西安电子科技大学计算机科学与技术拔尖班,西安电子科技大学入选基础学科拔尖学生培养计划2.0基地...
  15. 计算机视觉基础-1——直观简介
  16. MailRaider Pro for Mac(Outlook邮件格式转换工具) v3.5.0永久激活
  17. python中怎么赋值一个数为负无穷_python里面正无穷和负无穷问题?
  18. 一、JQuery选择器
  19. 人工智能掀起巨浪,“AI独角兽”第四范式奔向港交所
  20. Rolling back JDBC Connection [org.sqlite.jdbc4.JDBC4Connection

热门文章

  1. 希望不遥远,层层歌声飞
  2. Android 硬件通讯之 蓝牙,USB,WIFI(一.蓝牙)
  3. 亚马逊服务器 修改密钥对,更改ec2实例的密钥对
  4. 懂得SEO不是全部,网站最终出路在于思维方式
  5. 计算机基础:IP地址,子网掩码,默认网关,DNS服务器
  6. CryptoAPI编程
  7. 另类方法----不刷BIOS为9600的软改9550成为T2
  8. 海康工业相机连续存图、录像功能介绍
  9. C Templates学习笔记⑧:模板中的名称
  10. NVIDIA 7th SkyHackathon(八)使用 Flask 与 Vue 开发 Web