(項目)線上教育平臺(十一)

来源:https://www.cnblogs.com/Sweltering/archive/2018/11/22/9998675.html
-Advertisement-
Play Games

十五、首頁全局配置 1、首頁前端頁面配置 將index.html繼承base.html頁面,修改繼承的block地方: 修改base.html頁面中導航欄選中狀態的代碼: 2、全局搜索功能 首頁的全局搜索功能可以對課程,機構,教師進行全局搜索,搜索的代碼放在deco-common.js文件中: 只需 ...


十五、首頁全局配置

1、首頁前端頁面配置

  將index.html繼承base.html頁面,修改繼承的block地方:

  修改base.html頁面中導航欄選中狀態的代碼:

2、全局搜索功能

  首頁的全局搜索功能可以對課程,機構,教師進行全局搜索,搜索的代碼放在deco-common.js文件中:

 1 //頂部搜索欄搜索方法
 2 function search_click(){
 3     var type = $('#jsSelectOption').attr('data-value'),
 4         keywords = $('#search_keywords').val(),
 5         request_url = '';
 6     if(keywords == ""){
 7         return
 8     }
 9     if(type == "course"){
10         request_url = "/course/list?keywords="+keywords
11     }else if(type == "teacher"){
12         request_url = "/org/teacher/list?keywords="+keywords
13     }else if(type == "org"){
14         request_url = "/org/list?keywords="+keywords
15     }
16     window.location.href = request_url
17 }

  只需要在課程列表介面、機構列表介面、講師列表介面中加入搜索的邏輯即可:

 1 class CourseListView(View):
 2     """課程列表頁"""
 3     def get(self, request):
 4         # 獲取所有的課程
 5         all_courses = Course.objects.all()
 6 
 7         # 排序(學習人數,點擊數)
 8         sort = request.GET.get('sort', '')
 9         if sort:
10             if sort == 'students':
11                 all_courses = all_courses.order_by('-students')
12             elif sort == 'hot':
13                 all_courses = all_courses.order_by('-click_nums')
14 
15         # 熱門課程
16         hot_courses = all_courses.order_by('-click_nums')[:2]
17 
18         # 搜索
19         search_keywords = request.GET.get('keywords', '')
20         if search_keywords:
21             all_courses = all_courses.filter(Q(name__icontains=search_keywords)|
22                                              Q(desc__icontains=search_keywords)|
23                                              Q(detail__icontains=search_keywords))
24 
25         # 分頁
26         try:
27             page = request.GET.get('page', 1)
28         except PageNotAnInteger:
29             page = 1
30         p = Paginator(all_courses, 3, request=request)
31         courses = p.page(page)
32 
33         return render(request, 'course-list.html', {
34             'all_courses': courses,
35             'sort': sort,
36             'hot_courses': hot_courses
37         })
課程列表介面
 1 class OrgView(View):
 2     """機構列表"""
 3     def get(self, request):
 4         # 取出所有的機構
 5         all_orgs = CourseOrg.objects.all()
 6 
 7         # 取出所有的城市
 8         all_citys = CityDict.objects.all()
 9 
10         # 搜索
11         search_keywords = request.GET.get('keywords', '')
12         if search_keywords:
13             all_orgs = all_orgs.filter(Q(name__icontains=search_keywords)|
14                                        Q(desc__icontains=search_keywords))
15 
16         # 排名篩選(根據點擊量排名)
17         hot_orgs = all_orgs.order_by('-click_nums')[:3]
18 
19         # 學習人數和課程數排名篩選
20         sort = request.GET.get('sort', '')
21         if sort:
22             if sort == 'students':
23                 all_orgs = all_orgs.order_by('-students')
24             elif sort == 'courses':
25                 all_orgs = all_orgs.order_by('-course_nums')
26 
27         # 城市篩選(從request中獲取城市的id)
28         city_id = request.GET.get('city', '')
29         if city_id:
30             all_orgs = all_orgs.filter(city_id=int(city_id))
31 
32         # 類別篩選(從request中獲取機構類別ct)
33         category = request.GET.get('ct', '')
34         if category:
35             all_orgs = all_orgs.filter(category=category)
36 
37         # 篩選完再統計數量
38         org_nums = all_orgs.count()
39 
40         # 分頁
41         try:
42             page = request.GET.get('page', 1)
43         except PageNotAnInteger:
44             page = 1
45         p = Paginator(all_orgs, 5, request=request)
46         orgs = p.page(page)
47 
48         return render(request, 'org-list.html', {
49             'all_orgs': orgs,
50             'all_citys': all_citys,
51             'org_nums': org_nums,
52             'city_id': city_id,
53             'category': category,
54             'hot_orgs': hot_orgs,
55             'sort': sort
56         })
機構列表介面
 1 class TeacherListView(View):
 2     """講師列表頁面"""
 3     def get(self, request):
 4         # 獲取所有的講師
 5         all_teachers = Teacher.objects.all()
 6 
 7         # 搜索
 8         search_keywords = request.GET.get('keywords', '')
 9         if search_keywords:
10             all_teachers = all_teachers.filter(name__icontains=search_keywords)
11 
12         # 統計講師的總數
13         teacher_nums = all_teachers.count()
14 
15         # 排序,按點擊數排序
16         sort = request.GET.get('sort', '')
17         if sort:
18             if sort == 'hot':
19                 all_teachers = all_teachers.order_by('-click_nums')
20 
21         # 講師排行版
22         teacher_sorted = all_teachers.order_by('-click_nums')[:3]
23 
24         # 分頁
25         try:
26             page = request.GET.get('page', 1)
27         except PageNotAnInteger:
28             page = 1
29         p = Paginator(all_teachers, 5, request=request)
30         teachers = p.page(page)
31 
32         return render(request, 'teachers-list.html', {
33             'all_teachers': teachers,
34             'teacher_nums': teacher_nums,
35             'sort': sort,
36             'teacher_sorted': teacher_sorted
37         })
講師列表介面

十六、個人中心

1、個人中心頁面

1.1 個人中心前端頁面配置

  在templates目錄下新建usercenter-base.html文件,作為個人中心頁面的母版,然後將usercenter-info.html頁面拷貝到該目錄下,並把其中的內容拷貝到母版中,修改其中需要block的地方:

  1 {% load staticfiles %}
  2 
  3 <!DOCTYPE html>
  4 <html>
  5 
  6 <head>
  7     <meta charset="UTF-8">
  8     <meta name="renderer" content="webkit">
  9     <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
 10     <title>{% block title %}個人信息- 知能網{% endblock %}</title>
 11     <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
 12     <link rel="stylesheet" type="text/css" href="{% static 'css/animate.css' %}">
 13     <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
 14     <link rel="stylesheet" type="text/css" href="{% static 'js/plugins/queryCity/css/cityLayout.css' %}">
 15 
 16     <link rel="stylesheet" type="text/css" href="{% static 'css/lq.datetimepick.css' %}"/>
 17     {% block custom_css %}{% endblock %}
 18 
 19 
 20     <script src="{% static 'js/jquery.min.js' %}" type="text/javascript"></script>
 21     <script src="{% static 'js/jquery-migrate-1.2.1.min.js' %}" type="text/javascript"></script>
 22 
 23 </head>
 24 <body>
 25 <section class="headerwrap headerwrap2">
 26     <header>
 27         <div  class="header2 header">
 28              <div class="top">
 29                 <div class="wp">
 30                     <div class="fl"><p>服務電話:<b>13993601652</b></p></div>
 31                     <!--登錄後跳轉-->
 32 
 33 
 34                         <div class="personal">
 35                             <dl class="user fr">
 36                                 <dd>bobby<img class="down fr" src="{% static 'images/top_down.png' %}"/></dd>
 37                                 <dt><img width="20" height="20" src="{% static 'media/image/2016/12/default_big_14.png' %}"/></dt>
 38                             </dl>
 39                             <div class="userdetail">
 40                                 <dl>
 41                                     <dt><img width="80" height="80" src="{% static 'media/image/2016/12/default_big_14.png' %}"/></dt>
 42                                     <dd>
 43                                         <h2>django</h2>
 44                                         <p>bobby</p>
 45                                     </dd>
 46                                 </dl>
 47                                 <div class="btn">
 48                                     <a class="personcenter fl" href="usercenter-info.html">進入個人中心</a>
 49                                     <a class="fr" href="/logout/">退出</a>
 50                                 </div>
 51                             </div>
 52                         </div>
 53                         <a href="usercenter-message.html">
 54                             <div class="msg-num"><span id="MsgNum">0</span></div>
 55                         </a>
 56 
 57 
 58                 </div>
 59             </div>
 60 
 61     <div class="middle">
 62         <div class="wp">
 63             <a href="index.html"><img class="fl" src="{% static 'images/logo2.png' %}"/></a>
 64             <h1>我的知能網</h1>
 65         </div>
 66     </div>
 67             </div>
 68     </header>
 69 </section>
 70 
 71 
 72 
 73 <!--crumbs start-->
 74 {% block custom_bread %}
 75 
 76 {% endblock %}
 77 
 78 
 79 <section>
 80     <div class="wp list personal_list">
 81     <div class="left">
 82         <ul>
 83             <li class="active2"><a href="usercenter-info.html">個人資料</a></li>
 84             <li ><a href="usercenter-mycourse.html">我的課程</a></li>
 85             <li ><a href="usercenter-fav-course.html">我的收藏</a></li>
 86             <li >
 87                 <a href="usercenter-message.html" style="position: relative;">
 88                     我的消息
 89                 </a>
 90             </li>
 91         </ul>
 92     </div>
 93 
 94 
 95     {% block custom_right_content %}
 96     
 97     {% endblock %}
 98 
 99 
100     </div>
101 </section>
102 
103 <!--sidebar start-->
104 <section>
105     <ul class="sidebar">
106         <li class="qq">
107             <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=2023525077&site=qq&menu=yes"></a>
108         </li>
109         <li class="totop"></li>
110     </ul>
111 </section>
112 <!--sidebar end-->
113 <!--header start-->
114 
115 <div class="dialog" id="jsDialog">
116     <div class="successbox dialogbox" id="jsSuccessTips">
117         <h1>成功提交</h1>
118         <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
119         <div class="cont">
120             <h2>您的需求提交成功!</h2>
121             <p></p>
122         </div>
123     </div>
124     <!--提示彈出框-->
125     <div class="bidtips dialogbox promptbox" id="jsComfirmDialig">
126         <h1>確認提交</h1>
127         <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
128         <div class="cont">
129             <h2>您確認提交嗎?</h2>
130             <dd class="autoTxtCount">
131                 <div class="button">
132                     <input type="button" class="fl half-btn" value="確定" id="jsComfirmBtn"/>
133                     <span class="fr half-btn jsCloseDialog">取消</span>
134                 </div>
135             </dd>
136         </div>
137     </div>
138     <div class="resetpwdbox dialogbox" id="jsResetDialog">
139         <h1>修改密碼</h1>
140         <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
141         <div class="cont">
142             <form id="jsResetPwdForm" autocomplete="off">
143                 <div class="box">
144                     <span class="word2" >&nbsp;&nbsp;&nbsp;&nbsp;</span>
145                     <input type="password" id="pwd" name="password1" placeholder="6-20位非中文字元"/>
146                 </div>
147                 <div class="box">
148                     <span class="word2" >確定密碼</span>
149                     <input type="password" id="repwd" name="password2" placeholder="6-20位非中文字元"/>
150                 </div>
151                 <div class="error btns" id="jsResetPwdTips"></div>
152                 <div class="button">
153                     <input id="jsResetPwdBtn" type="button" value="提交" />
154                 </div>
155                 <input type='hidden' name='csrfmiddlewaretoken' value='DaP7IUKm9FA9nELA9YUlYYWpyIDdCiIP' />
156             <input type='hidden' name='csrfmiddlewaretoken' value='799Y6iPeEDNSGvrTu3noBrO4MBLv6enY' />
157             </form>
158         </div>
159     </div>
160     <div class	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.網路通信協議 osi七層模型:按照分工不同把互聯網協議從邏輯上劃分了層級 socket層 2.理解socket: Socket是應用層與TCP/IP協議族通信的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對 ...
  • 正常情況下,新激活的goroutine的結束過程是不可控制的,唯一可以保證終止goroutine的行為是main goroutine的終止。也就是說,我們並不知道哪個goroutine什麼時候結束。 但很多情況下,我們正需要知道goroutine是否完成。這需要藉助sync包的WaitGroup來實 ...
  • 1.C/S架構 C/S架構:Client與Server ,中文意思:客戶端與伺服器端架構,這種架構也是從用戶層面(也可是物理層面)來劃分的。這裡客戶端一般指需先安裝再執行的應用程式,對操作系統依賴性較大;服務端即是這類程式對應的伺服器。 B/S架構:browser/server,瀏覽器端與伺服器端架 ...
  • worker pool簡介 worker pool其實就是線程池thread pool。對於go來說,直接使用的是goroutine而非線程,不過這裡仍然以線程來解釋線程池。 線上程池模型中, 有2個隊列一個池子:任務隊列、已完成任務隊列和線程池 。其中已完成任務隊列可能存在也可能不存在,依據實際需 ...
  • 資料庫事務的四大特性以及事務的隔離級別 本篇講訴資料庫中事務的四大特性(ACID),並且將會詳細地說明事務的隔離級別。 如果一個資料庫聲稱支持事務的操作,那麼該資料庫必須要具備以下四個特性: ⑴ 原子性(Atomicity) 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇博 ...
  • Python基礎知識(10):函數(Ⅱ) 一、全局變數和局部變數 局部變數:在函數內定義的變數,在函數內使用 全局變數:在函數外定義的變數,在程式任何地方都可以使用 1、全局變數與局部變數同名 這時函數內部只調用局部變數,如果要調用全局變數需要在函數內加一句“global 同名變數” 結果:1 2、 ...
  • 首先請看下麵的程式: 1. 註釋 2.對中文的支持 python2和python3不一樣,python3預設支持,python2 需要加上 3.變數 為了更充分的利用記憶體空間以及更有效率的管理記憶體,變數是有不同的類型的,如下所示 怎樣知道一個變數的類型呢? 在python中,只要定義了一個變數,而且 ...
  • Arraylist 與 LinkedList 異同 1. 是否保證線程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保證線程安全; 2. 底層數據結構: Arraylist 底層使用的是Object數組;LinkedList 底層使用的是雙向迴圈鏈表數據結構; 3. 插 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...