博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于python的种子搜索网站--开发过程
阅读量:6548 次
发布时间:2019-06-24

本文共 4140 字,大约阅读时间需要 13 分钟。

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

网站演示: 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/
', 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'

复制代码

列表展示页

从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复制代码

转载地址:http://krgdo.baihongyu.com/

你可能感兴趣的文章
spring整合elasticsearch之环境搭建
查看>>
TensorFlow 架构与设计-编程模型【转】
查看>>
如何运行Struts2官网最新Demo?
查看>>
'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
查看>>
XDebug 教程
查看>>
js 去html 标签
查看>>
好久不见
查看>>
小tips:JS中的children和childNodes
查看>>
二叉树的遍历
查看>>
Oracle的FIXED_DATE参数
查看>>
NDK配置
查看>>
(转)@ContextConfiguration注解说明
查看>>
[置顶] ※数据结构※→☆线性表结构(queue)☆============队列 顺序存储结构(queue sequence)(八)...
查看>>
Linux 系统的单用户模式、修复模式、跨控制台登录在系统修复中的运用
查看>>
JQuery UI Widget Factory官方Demo
查看>>
Atlas揭秘 —— 绑定(Binding)
查看>>
install xcode_3.2.5_and_iOS_sdk_4.2 _final with mac lion10.7.3
查看>>
一起谈.NET技术,C# 委托,事件和Lambda表达式
查看>>
远离云计算风险三步走
查看>>
Silverlight 游戏开发小技巧:技能冷却效果2(Cool“.NET研究”down)2
查看>>