基于python的种子搜索网站(二)开发过程
本讲会对种子搜索网站的开发过程进行详细的讲解。
网站演示: 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 = 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
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
java并发汇总
volatile volatile (https://www.jianshu.com/p/506c1e38a922) 寒泉子bolg (http://lovestblog.cn/blog/archives/) 基于栈与基于寄存器,大杂烩 (https://rednaxelafx.iteye.com/blog/492667)4.ContextSwitch(http://itindex.net/detail/42231-java-%E8%A7%86%E8%A7%92-%E7%90%86%E8%A7%A3) 5.happens-Before(http://ifeve.com/easy-happens-before/)
-
下一篇
基于python的种子搜索网站(三)项目部署
本讲会对种子搜索网站的部署过程进行详细的讲解。 网站演示: https://bt.mypython.me 源码地址: https://github.com/geeeeeeeek/bt 项目部署过程 系统要求: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 pip3 install django-ratelimit 安装mysql sudo apt install mysql-server 配置部分 配置mysql(/etc/mysql/my.cnf) [client] default-character-set=utf8 [mysqld] character-set...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程

微信收款码
支付宝收款码