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

源码地址: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 = 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的种子搜索网站-开发过程的更多相关文章

  1. 基于python的种子搜索网站,你懂得!

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

  2. 基于python的种子搜索网站-项目部署

    本讲会对种子搜索网站的部署过程进行详细的讲解. 网站演示: https://bt.mypython.me 源码地址: https://github.com/geeeeeeeek/bt 项目部署过程 系 ...

  3. 基于python的种子搜索网站(三)项目部署

    项目部署过程 系统要求:ubuntu 16.04(或以上) 环境搭建和配置,必须严格按照以下步骤来安装部署!如有问题可以咨询(weixin:java2048) 安装部分 安装nginx sudo ap ...

  4. 通过nginx搭建基于python的web环境

    前言: 在搭建开始前,我们先来梳理下web服务工作流程,先看下图: 1.用户(PC)向web服务器发起http请求 2.web服务器判断用户请求文件是否为静态文件,是则直接读取静态文件并返回给用户,不 ...

  5. 基于webmagic的种子网站爬取

    代码地址如下:http://www.demodashi.com/demo/12175.html 1. 概述 因为无聊,闲来没事做,故突发奇想,爬个种子,顺便学习爬虫.本文将介绍使用Spring/Myb ...

  6. 利用基于Python的Pelican打造一个自己的个人纯静态网站

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_100 其实呢这么多年以来我一直建议每个有技术追求的开发者都要有写技术博客记笔记的良好习惯,一来可以积累知识,二来可以帮助别人,三来 ...

  7. selenium2自动化测试实战--基于Python语言

    自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...

  8. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  9. Photoshop中磁力套索的一种简陋实现(基于Python)

    经常用Photoshop的人应该熟悉磁力套索(Magnetic Lasso)这个功能,就是人为引导下的抠图辅助工具.在研发领域一般不这么叫,通常管这种边缘提取的办法叫Intelligent Sciss ...

随机推荐

  1. 【Python3爬虫】用Python中的队列来写爬虫

    一.写在前面 当你看着你的博客的阅读量慢慢增加的时候,内心不禁有了些小激动,但是不得不吐槽一下--博客园并不会显示你的博客的总阅读量是多少.而这一篇博客就将教你怎么利用队列这种结构来编写爬虫,最终获取 ...

  2. vue全家桶安装以及修改webpack配置新增vue项目启动方式

    一.安装node环境(自带npm) 下载地址 二.替换下载源 // 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taob ...

  3. 强化学习(十四) Actor-Critic

    在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法.但是由于该算法 ...

  4. Python:游戏:300行代码实现俄罗斯方块

    本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很难啊, ...

  5. Spring Boot入门(四):开发Web Api接口常用注解总结

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...

  6. 号称“新至强,可拓展,赢当下”的Xeon可拓展处理器有多逆天?

    目前企业数据中心正在发生重大变化,许多企业正在经历基于在线服务和数据的广泛转型.他们将这些数据用于功能强大的人工智能和分析应用程序,这些应用程序可以将其转化为改变业务的洞察力,然后推出可以使这些洞察力 ...

  7. MIP开发教程(三) 使用MIP-CLI工具调试组件

    一 . 在 mip-extensions 仓库中创建新的组件 二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发 ...

  8. [AI开发]基于深度学习的视频多目标跟踪实现

    据我目前了解掌握,多目标跟踪大概有两种方式: Option1 基于初始化帧的跟踪,在视频第一帧中选择你的目标,之后交给跟踪算法去实现目标的跟踪.这种方式基本上只能跟踪你第一帧选中的目标,如果后续帧中出 ...

  9. 微服务与RPC

    1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制( ...

  10. JS的常用正则表达式 验证密码(转载自用)

    JS的正则表达式 强:字母+数字+特殊字符   ^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^& ...