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

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

源码地址: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

原文地址:https://www.cnblogs.com/net19880504/p/10496530.html

时间: 2024-11-08 09:14:42

基于python的种子搜索网站-开发过程的相关文章

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

本讲会对种子搜索网站的部署过程进行详细的讲解. 网站演示: https://bt.mypython.me 源码地址: https://github.com/geeeeeeeek/bt 项目部署过程 系统要求:ubuntu 16.04(或以上) 环境搭建和配置,必须严格按照以下步骤来安装部署!如有问题可以咨询(微信:java2048) 安装部分 安装nginx sudo apt install nginx 安装python3和pip3 sudo apt install python3sudo ap

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

项目部署过程 系统要求:ubuntu 16.04(或以上) 环境搭建和配置,必须严格按照以下步骤来安装部署!如有问题可以咨询(weixin:java2048) 安装部分 安装nginx sudo apt install nginx 安装python3和pip3 sudo apt install python3 sudo apt install python3-pip 安装依赖 pip3 install uwsgi pip3 install django pip3 install pymysql

[转载]知乎技术方案初探——基于Python的Tornado框架

原文出处:http://nonfu.me/p/5935.html 知乎的整个网站架构图如下: 知乎技术方案 知乎是国内很少的使用Python开发的一个网站,也很多值得我们学习的地方,从知乎让我们也可以了解到一些新的WEB技术. 一.Python框架 知乎目前使用的是Tornado 框架.Tornado 全称Tornado Web Server,是一个用Python 语言写成的Web 服务器兼Web 应用框架,由 FriendFeed 公司在自己的网站FriendFeed 中使用,被faceboo

Flask之旅《Flask Web开发:基于Python的Web应用开发实战》学习笔记

<Flask Web开发:基于Python的Web应用开发实战> 点击上方的"目录"快速到达哦! 虽然简单的网站(Flask+Python+SAE)已经上线,但只是入门.开发大型网站,系统地学习一遍还是有必要的. 1 虚拟环境 2016-6-8 书上介绍了 virtualenv,每个venv都会拷贝一份packages到项目 /venv目录. virtualenv venv venv\Scripts\activate.bat (venv) $ pip freeze >

关于《selenium2自动测试实战--基于Python语言》

关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至会说,都在扯犊子,看了半天也不知道如何下手. 对于操作手册的书,一般会提供大量的实例,告诉你详细的步骤.对于高手来说,这不就是翻译了一下官方文档嘛,好意思拿来骗钱.但对于新手来说,反而认为是好处,跟着上面的步骤操作就掌握了某种技术能力. 显然,本书属于后者,书中提供了大量代码实例,并没有太多思想层面

基于Python Spark的大数据分析_pyspark实战项目课程

基于Python Spark的大数据分析(第一期) 课程介绍地址:http://www.xuetuwuyou.com/course/173 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:轩宇老师 1.开课时间:小班化教学授课,第一期开课时间为5月20号(满30人开班,先报先学!): 2.学习方式:在线直播,共8次课,每次2小时,每周2次(周三.六,晚上20:30 - 22:30),提供在线视频,课后反复学习: 3.报名课程后,请联系客服申请加入班级答疑交流QQ群:

基于深度及广度优先搜索的迷宫问题的演示

1 时间复杂度分析 由于该图采用邻接矩阵存储,整个算法遍历的过程所花费的时间复杂度为该矩阵的N(row*col).而由于其需要分别访问已经定位,需要进行分别2次操作,如下: visited = new bool[col*row];//访问标记 for (i=0; i<row; i++) for (j=0; j<col; j++) visited[i*col+j] = false;//初始为未访问状态 position = new POSITION[col*row]; for (i=0; i&l

【归纳备忘】收集的一些BT种子搜索网址,这些网址太神奇了。

收集的一些BT种子搜索网址,这些网址太神奇了,不知道怎么实现的,搜电影非常方便. 1.一起搜BT 本人最常用的一个,速度比较快,资源非常多,应用仅有. http://www.yqsobt.com 2.BTDigg 因为这个站对中文资源支持比较好,而且支持种子内部搜索. https://btdigg.org/ 3.磁力搜索-手撕包菜 中文站点,简洁好用. http://bt.shousibaocai.com/ 4.Bt Kitty 中文站点,特色是文件标签,可以提供类似的资源. http://bt

【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库

[机器学习算法实现]系列文章将记录个人阅读机器学习论文.书籍过程中所碰到的算法,每篇文章描述一个具体的算法.算法的编程实现.算法的具体应用实例.争取每个算法都用多种语言编程实现.所有代码共享至github:https://github.com/wepe/MachineLearning-Demo     欢迎交流指正! (1)kNN算法_手写识别实例--基于Python和NumPy函数库 1.kNN算法简介 kNN算法,即K最近邻(k-NearestNeighbor)分类算法,是最简单的机器学习算