乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      利用Python打造短鏈服務(一)

       達坂城大豆 2017-10-12

      一、越來越長的網(wǎng)址與短鏈服務

      互聯(lián)網(wǎng)發(fā)展愈快,功能越多,有些網(wǎng)址也越來越長,如果僅僅是瀏覽還好,涉及到傳播,一大串的網(wǎng)址分發(fā)容易出錯也不易推廣。



      而且,有些互聯(lián)網(wǎng)巨頭嚴防死守競爭對手的的鏈接出現(xiàn)在自家的產(chǎn)品里,用盡一切手段限制競爭對手的網(wǎng)址鏈接在自家產(chǎn)品上被順利打開引流。


      處于便于傳播、不影響頁面美觀或者是繞過屏蔽的目的,網(wǎng)址縮短服務應運而生。

      目前國內有很多家網(wǎng)站提供網(wǎng)站縮短服務,比如騰訊家的t.im、微博家的t.cn、百度家的dwz.cn等,有一些只是提供簡單的網(wǎng)址縮短服務,有一些則在網(wǎng)址縮短服務的基礎上還增加了訪客統(tǒng)計的功能,對一些推廣鏈接來說,很有用。


      短鏈的實現(xiàn)方式很簡單,我們可以使用Python輕松地構建一個短鏈服務出來。

      二、構建短鏈服務

      網(wǎng)址縮短與短鏈生成的方式,一般有兩種。
      一種是用哈希算法,一種則是生成隨機字符串與原網(wǎng)址的對應存儲在數(shù)據(jù)庫中。
      在此,我們使用后一種方法。

      短鏈服務終究是一個Web服務,我們需要一個Web框架。

      Python中有很多優(yōu)秀的Web框架,比如Flask、Django、Tornado……

      每個框架都有各自的特色和優(yōu)點,每個框架也有各自的擁躉者。在此,我們選用Django,原因無他,使用熟悉而已。

      1、創(chuàng)建一個虛擬環(huán)境

      為了與本機原有的Python環(huán)境相隔離,我們使用virtualenv創(chuàng)建一個隔離的虛擬Python環(huán)境。


      2、安裝Django

      使用active命令進入虛擬環(huán)境中,安裝所需要的Django庫。


      3、創(chuàng)建Django項目和應用

      使用django-admin工具創(chuàng)建一個項目(project)dwz和一個應用(app)shortener



      我們啟動項目,看看是否正確


      啟動項目

      嗯,啟動正常的



      接下來,我們創(chuàng)建一個用于保存原網(wǎng)址和隨機字符串的數(shù)據(jù)庫模型

      4、分析和創(chuàng)建數(shù)據(jù)庫模型

      因為我們選用的是隨機字符串匹配原始網(wǎng)址的網(wǎng)址縮短方案,所以,我們需要使用數(shù)據(jù)庫將生成的隨機字符串和原始網(wǎng)址一一對應保存在一張數(shù)據(jù)表中。

      分析一下,這張數(shù)據(jù)表里面,一共有些什么字段:

      • 隨機字符串:對應于原始網(wǎng)址的縮短碼;

      • 原始網(wǎng)址URL

      • 創(chuàng)建時間:方便進行記錄統(tǒng)計

      • 活動狀態(tài):方便短鏈管理

      那么,我們就需要在Django中創(chuàng)建一張有四個字段的數(shù)據(jù)模型。

      在models.py文件中創(chuàng)建一個DwzURL模型:



      將應用添加到setting.py的INSTALLED_APPS 中:


      生成模型:



      完成之后,運行項目,去后臺看看。
      先創(chuàng)建一個超級用戶:



      登錄后臺:



      發(fā)現(xiàn)并沒有我們創(chuàng)建的模型,原來是admin.py中忘記添加了:



      我們在admin.py中把模型添加進去。對了,英文界面看著不適應,順便去setting.py文件中把語言改成中文。

      在admin.py中添加模型:


      修改網(wǎng)址語言為中文:


      我們再去后臺看看:



      嗯,已經(jīng)出現(xiàn)我們新建的模型,而且網(wǎng)站語言從英文變成了中文。

      我們新建一個記錄看看,就拿之前的淘寶活動鏈接吧:



      嗯,后臺上也出現(xiàn)了我們新建的記錄:



      對應關系是建立了,但是這是手動的,我們需要的是輸入一個長網(wǎng)址,就生成一個縮短碼。

      5、優(yōu)化模型方法

      嗯,我們創(chuàng)建一個生成縮短碼的函數(shù),再重寫DwzURL模型的save()方法,讓其在輸入一個URL的時候自動生成一個縮短碼。

      創(chuàng)建縮短碼生成函數(shù),從英文字母和數(shù)字中隨機生成一個6位數(shù)的字符串:



      重寫DwzURL模型的save()方法,讓其在保存的時候自動調用縮短碼生成函數(shù)生成一個縮短碼:



      我們來測試一下,新增一個記錄,只輸入網(wǎng)址URL:

      結果是按照我們的設想順利生成了一個縮短碼:



      這樣就達到了我們期望的只輸入網(wǎng)址,自動隨機生成一個縮短碼的效果。

      6、創(chuàng)建視圖

      Django是典型的MVC模式的Web框架,模型(models)負責數(shù)據(jù)記錄、視圖(views)負責業(yè)務邏輯、路由(urls)負責業(yè)務邏輯對應的頁面路徑,最后模板(templates)負責頁面渲染。

      我們已經(jīng)構建好了模型,接下來我們來寫網(wǎng)址縮短的業(yè)務邏輯(視圖)。

      目前我們整個服務的邏輯很簡單:

      • 三個功能:首頁展示、縮短碼生成、短鏈跳轉

      • 兩個視圖:首頁(GET方法呈現(xiàn)首頁)及短碼生成視圖(POST方法生成縮短碼)、短鏈跳轉視圖

      開干!

      首先是首頁第一個視圖:
      創(chuàng)建一個基于類的視圖,創(chuàng)建一個get方法,用于呈現(xiàn)首頁HTML;創(chuàng)建一個post方法,接收表單傳遞的網(wǎng)址并生成縮短碼及返回:



      創(chuàng)建第二個短鏈跳轉視圖,獲取縮短碼進行從數(shù)據(jù)庫中進行對比,如果存在則重定向至原網(wǎng)址,如果不存在則返回404:



      視圖創(chuàng)建好了,接下來設置路由。

      7、設置路由

      按照我們寫的視圖,我們需要新增兩個路由:

      • 首頁

      • 跳轉

      在urls.py的urlpatterns列表中新增兩條路由,分別對應兩個視圖:



      路由也設置好了,對了,我們還缺了HTML模板。去網(wǎng)上搜索一個搜索框的模板:
      嗯,就它了!



      創(chuàng)建一個模板目錄templates,在settings.py中設置模板路徑:



      創(chuàng)建一個static目錄,在settings文件中設置靜態(tài)文件路徑:


      8、測試

      由于是在本地做測試,我們需要修改一下本機的hosts文件,將一個短域名映射到127.0.0.1上,如果是部署在服務器上的,就直接綁定域名和部署。



      將g.me映射到本地端口:



      打開首頁看看:



      我們輸入一個長的網(wǎng)址看看(gif動圖):



      嗯,這樣,一個具備基本功能的短鏈服務就已經(jīng)使用Python構造好了。


      下一步,我們可以做些什么?

      • 構造一個API服務,批量生成短鏈

      • 新建一個應用,對短鏈進行統(tǒng)計分析,類似于CNZZ

      嗯,下一步的事情,咱們下一文再見!



        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多