潭州课堂25班:Ph201805201 django 项目 第二十七课 docker简介,配置文件 (课堂笔记)...

本文主要是介绍潭州课堂25班:Ph201805201 django 项目 第二十七课 docker简介,配置文件 (课堂笔记)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

新闻搜索功能实现

 

 

一、docker介绍

1.什么是docker?
  • 使用容器让创建、部署、运行应用程序更简单的一个工具

  • 让应用所需的库和依赖环境打包

  • 有一点点像虚拟机

     

 

 

2.为什么使用docker?

 

 

3.docker vs vmware(or virtualbox)?

 

 

 

 

4.docker 架构

 

  • Docker platform

  • Docker Engine

    • a server process

    • a client cli

    • a rest api interface

     

  • Docker architecture

    • Docker client

    • Docker daemon

    • Docker registries

  • Docker objects

    • Images

    • Containers

    • Services

  • Docker Hub

 

5.安装docker

见官网,略

6.创建Dockerfile案例

 

 

#This is a sample image
FROM ubuntu
LABEL maintainer="admin@youkou.site"
RUN apt-get update
RUN apt-get install –y nginx
CMD ["echo", "Hello World!"]

 

二、新闻搜索功能实现

1.需求分析
  • 可以使用数据库的模糊查询(like关键字)来实现,但效率极低

# 模糊查询
# like
# %表示任意多个任意字符
# _表示一个任意字符
SELECT *
FROM users
WHERE username LIKE '%python%' AND is_delete = 0;

 

  • 在多个字段中查询,使用like关键字不方便

  • 因此使用搜索引擎来实现全文检索

 

2.搜索引擎原理
  • 搜索引擎并不是直接在数据库中进行查询

  • 会对数据库中的数据进行一遍预处理,单独建立一份索引结构数据

  • 类似字典的索引检索页

 

3.Elasticsearch
  • 开源

  • 搜索引擎首选

  • 底层是开源库Lucene

  • REST API 的操作接口

 

搜索引擎在对数据构建索引时,需要进行分词处理。分词是指将一句话拆解成多个单字或词,这些字或词便是这句话的关键词。Elasticsearch 不支持对中文进行分词建立索引,需要配合扩展elasticsearch-analysis-ik来实现中文分词处理。

 

 

4.使用docker安装elasticsearch

a.获取镜像

# 拉取镜像到本地仓库
docker image pull delron/elasticsearch-ik:2.4.6-1.0
# 查看本地仓库是否有这个镜像
docker images
或docker image ls

b.将百度云盘中的elasticsearch.zip文件传到虚拟机中的家目录,然后unzip解压。在虚拟机中的elasticsearch/config/elasticsearch.yml第54行,更改ip地址为0.0.0.0,端口改为8002,默认端口为9200

 

# 在xshell中使用rz命令将elasticsearch.zip文件传到虚拟机的家目录中
#然后在家目录中解压
unzip elasticsearch.zip
cd ~/elasticsearch/config

 

# network.host: 172.18.168.123
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 8002

c.创建docker容器并运行

# 根据拉取到本地的镜像创建容器,需要将/home/bd/elasticsearch/config配置文件所在目录修改为你自己的路径
不行就加 sudo
docker run -dti --network=host --name=elasticsearch -v /home/binbin/elasticsearch/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0

 


# 查看是否创建成功
docker container ls -a
# 如果STATUS为Up则创建容器成功
CONTAINER ID       IMAGE                               COMMAND                 CREATED             STATUS             PORTS               NAMES
b254fe1ee0eb       delron/elasticsearch-ik:2.4.6-1.0   "/docker-entrypoint.…"   3 days ago         Up 3 days                               elasticsearch

# 运行如下命令,如果有显示则elasticsearch配置成功
curl 127.0.0.1:8002

d.进入项目虚拟环境中,安装相关包

# 进入项目虚拟环境
workon myblog_env

pip install django-haystack
pip install elasticsearch==2.4.1

e.在settings.py文件中加入如下配置:

INSTALLED_APPS = [
   'haystack',
]

ELASTICSEARCH_DSL = {
   'default': {
       'hosts': '127.0.0.1:8002'
  },
}

# Haystack
HAYSTACK_CONNECTIONS = {
   'default': {
       'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
       'URL': 'http://127.0.0.1:8002/',  # 此处为elasticsearch运行的服务器ip地址,端口号默认为9200
       'INDEX_NAME': 'dj_pre_class',  # 指定elasticsearch建立的索引库的名称
  },
}

# 设置每页显示的数据量
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 5
# 当数据库改变时,会自动更新索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
5.后端功能实现
# 在apps/news/search_indexes.py中创建如下类:(名称固定为search_indexes.py)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
@Time : 2018/12/23 11:22 AM
@Auth : Youkou
@Site : www.youkou.site
@File : search_indexes.py.py
@IDE : PyCharm
@Edit : 2018/12/23
-------------------------------------------------
"""

from haystack import indexes
# from haystack import site

from .models import News


class NewsIndex(indexes.SearchIndex, indexes.Indexable):
   """
  News索引数据模型类
  """
   text = indexes.CharField(document=True, use_template=True)
   id = indexes.IntegerField(model_attr='id')
   title = indexes.CharField(model_attr='title')
   digest = indexes.CharField(model_attr='digest')
   content = indexes.CharField(model_attr='content')
   image_url = indexes.CharField(model_attr='image_url')
   # comments = indexes.IntegerField(model_attr='comments')

   def get_model(self):
       """返回建立索引的模型类
      """
       return News

   def index_queryset(self, using=None):
       """返回要建立索引的数据查询集
      """

       return self.get_model().objects.filter(is_delete=False, tag_id=1)

 

from haystack.views import SearchView as _SearchView


class SearchView(_SearchView):
   # 模版文件
   template = 'news/search.html'

   # 重写响应方式,如果请求参数q为空,返回模型News的热门新闻数据,否则根据参数q搜索相关数据
   def create_response(self):
       kw = self.request.GET.get('q', '')
       if not kw:
           show_all = True
           hot_news = models.HotNews.objects.select_related('news'). \
               only('news__title', 'news__image_url', 'news__id'). \
               filter(is_delete=False).order_by('priority', '-news__clicks')

           paginator = Paginator(hot_news, settings.HAYSTACK_SEARCH_RESULTS_PER_PAGE)
           try:
               page = paginator.page(int(self.request.GET.get('page', 1)))
           except PageNotAnInteger:
               # 如果参数page的数据类型不是整型,则返回第一页数据
               page = paginator.page(1)
           except EmptyPage:
               # 用户访问的页数大于实际页数,则返回最后一页的数据
               page = paginator.page(paginator.num_pages)
           return render(self.request, self.template, locals())
       else:
           show_all = False
           qs = super(SearchView, self).create_response()
           return qs
# 创建templates/search/indexes/news/news_text.txt文件(文件名为:应用名_text.txt)

{{ object.title }}
{{ object.digest }}
{{ object.content }}
# 在apps/news/urls.py中

urlpatterns = [
   path('search/', views.SearchView(), name='search'),

]
# 在虚拟机中执行如下命令,生成索引

python manage.py rebuild_index

 

 

6.前端功能实现
<!-- 在templates/news1/search.html中加入如下代码: -->


<div class="main-contain ">
                  <!-- search-box start -->
                  <div class="search-box">
                      <form action="" style="display: inline-flex;">

                          <input type="search" placeholder="请输入要搜索的内容" name="q" class="search-control">


                          <input type="submit" value="搜索" class="search-btn">
                      </form>
                      <!-- 可以用浮动 垂直对齐 以及 flex -->
                  </div>
                  <!-- search-box end -->
                  <!-- content start -->
                  <div class="content">
                      <!-- search-list start -->
                      {% if not show_all %}
                         <div class="search-result-list">
                           <h2 class="search-result-title">
                            搜索结果 <span style="font-weight: 700;color: #ff6620;">{{ paginator.num_pages }}</span>页
                           </h2>
                           <ul class="news-list">
                            {# 导入自带高亮功能 #}
                            {% load highlight %}
                            {% for one_news in page.object_list %}
                               <li class="news-item clearfix">
                                 <a href="{% url 'news1:news_detail' one_news.id %}" class="news-thumbnail" target="_blank">
                                 <img src="{{ one_news.object.image_url }}">
                                 </a>
                                 <div class="news-content">
                                   <h4 class="news-title">
                                     <a href="{% url 'news1:news_detail' one_news.id %}">
                                      {% highlight one_news.title with query %}
                                     </a>
                                   </h4>
                                   <p class="news-details">{{ one_news.digest }}</p>
                                   <div class="news-other">
                                     <span class="news-type">{{ one_news.object.tag.name }}</span>
                                     <span class="news-time">{{ one_news.object.update_time }}</span>
                                     <span
                                         class="news-author">{% highlight one_news.object.author.username with query %}

                                     </span>
                                   </div>
                                 </div>
                               </li>
                            {% endfor %}


                           </ul>
                         </div>

                      {% else %}

                         <div

转载于:https://www.cnblogs.com/gdwz922/p/10183034.html

这篇关于潭州课堂25班:Ph201805201 django 项目 第二十七课 docker简介,配置文件 (课堂笔记)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/299602

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免