Django小項目:Hub交友

項目結(jié)構(gòu):
B2`WYU6F)_`L3`~6}(SDV%6.png

功能集合

  • 主頁顯示用戶的照片,姓名,github鏈接,點擊訪問颈娜,跳轉(zhuǎn)到用戶的github主頁。


    GHR(8LN~BJMN~_O9SQ3SKKO.png
  • 輸入github的用戶名浙宜,點擊搜索按鈕官辽。頁面立即跳轉(zhuǎn)到該用戶的詳情頁。展示該用戶的姓名粟瞬,公司同仆,博客地址,點擊博客地址跳轉(zhuǎn)到用戶個人博客裙品。


    4$W@H3W22C~PPY@R7I}N4@D.png
  • 主頁點擊查詢按鈕俗批,頁面跳轉(zhuǎn)到用戶列表頁,展示所有搜索過的用戶信息市怎。


    @{@1US(41`5AQ2_)```1)`W.png
Django是一個python開源框架岁忘。
(M32AHUT`R8[D`913N(WPS1.png
MVC 模型
MVC 模式(Model–view–controller)是軟件工程中的一種軟件架構(gòu)模式,把軟件系統(tǒng)分為三個基本部分:模型(Model)区匠、視圖(View)和控制器(Controller)干像。

MVC 以一種插件式的、松耦合的方式連接在一起驰弄。

  • 模型(M)- 編寫程序應(yīng)有的功能麻汰,負責(zé)業(yè)務(wù)對象與數(shù)據(jù)庫的映射(ORM)。
  • 視圖(V)- 圖形界面戚篙,負責(zé)與用戶的交互(頁面)五鲫。
  • 控制器(C)- 負責(zé)轉(zhuǎn)發(fā)請求,對請求進行處理岔擂。
但是在Django中位喂,是MTV模型,本質(zhì)和MVC一致乱灵。只是名稱不一致忆某。

圖解

5`]W3EU`}9IU1L52`LLGB~R.png

用戶通過瀏覽器向我們的服務(wù)器發(fā)起一個請求(request),這個請求會去訪問視圖函數(shù):

a.如果不涉及到數(shù)據(jù)調(diào)用阔蛉,那么這個時候視圖函數(shù)直接返回一個模板也就是一個網(wǎng)頁給用戶。

b.如果涉及到數(shù)據(jù)調(diào)用癞埠,那么視圖函數(shù)調(diào)用模型状原,模型去數(shù)據(jù)庫查找數(shù)據(jù)聋呢,然后逐級返回。
視圖函數(shù)把返回的數(shù)據(jù)填充到模板中空格中颠区,最后返回網(wǎng)頁給用戶削锰。

開發(fā)環(huán)境

Win 10(64位)
Python 3.8.0
Django 3.1.7

編寫Model.py

Django中通過模型(Model)映射到數(shù)據(jù)庫,處理與數(shù)據(jù)相關(guān)的事務(wù)毕莱。

keithyang/models.py器贩,輸入如下代碼:

python
from __future__ import unicode_literals


from django.db import models


# Create your models here.

查詢列表信息 數(shù)據(jù)模型

class cal(models.Model):

    value_a = models.CharField(max_length=10)
    value_b = models.CharField(max_length=10)
    result =  models.CharField(max_length=10)



說明:每個模型(model)都被表示為 django.db.models.Model 類的子類,從它繼承了操作數(shù)據(jù)庫需要的所有方法朋截。

數(shù)據(jù)遷移(Migrations)

每次models.py文件發(fā)生變化都需要執(zhí)行2條指令

對模型的更改創(chuàng)建新的遷移表
python manage.py makemigrations
應(yīng)用遷移到數(shù)據(jù)庫中
python manage.py migrate

Views視圖函數(shù)

Django 中視圖即函數(shù)蛹稍,path函數(shù)將url映射到視圖

from django.shortcuts import render

import requests

import json
from .models import cal


# Create your views here.
def home(request):
    api_request = requests.get("https://api.github.com/users?since=0")
    api = json.loads(api_request.content)
    return render(request, 'home.html', {"api": api})


def user(request):
    # import requests
    if request.method == 'POST':
        user = request.POST['user']
        user_request = requests.get("https://api.github.com/users/" + user)
        user_name = json.loads(user_request.content)
        name = user_name['name']
        company = user_name['company']
        follower = user_name['followers']
        cal.objects.create(value_a=name, value_b=company, result=follower)

        return render(request, 'user.html', {'user_name': user_name})

    else:
        return Calllist(request)

# def addinfo(request):

def Calllist(request):
    data = cal.objects.all()
    # for data in spldata:
    #     name = data.value_a
    #     location = data.value_b
    #     follows = data.result

    return render(request, 'list.html', {'data': data} )




將url映射到視圖

from django.urls import path
from . import views
urlpatterns = [
    path('', views.home, name="home"),
    path('user/', views.user, name="user"),
    path('list/', views.Calllist, name="list"),
]

Templates/base.html,home.html,user.html,list.html

Bootstrap中獲取模板文件部服,編寫home.html,user.html,list.html,
使用{% extends 'base.html'%}繼承base.html文件唆姐。
{% block content %}


<!doctype html>
<html lang="zh-CN">
  <head>
    <!-- 必須的 meta 標簽 -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap 的 CSS 文件 -->
    <link rel="stylesheet"  integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

    <title>Hub交友</title>
  </head>
  <body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="{% url 'home' %}">Hub交友</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>

<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">

  <li class="nav-item">
    <a class="nav-link" href="{% url 'user' %}">查詢</a>
  </li>


</ul>
<form class="form-inline my-2 my-lg-0" method="POST" action="{%url 'user'%}">
    {% csrf_token %}
  <input class="form-control mr-sm-2" type="search"  name="user" aria-label="Search">
  <button class="btn btn-outline-success my-2 my-sm-0" type="submit">搜索</button>
</form>
</div>
</nav>
    <br/>
    <div class="container">
        {% block content %}
        {% endblock %}
    </div>


    <!-- JavaScript 文件是可選的。從以下兩種建議中選擇一個即可廓八! -->

    <!-- 選項 1:jQuery 和 Bootstrap 集成包(集成了 Popper) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-LCPyFKQyML7mqtS+4XytolfqyqSlcbB3bvDuH9vX2sdQMxRonb/M3b9EmhCNNNrV" crossorigin="anonymous"></script>

    <!-- 選項 2:Popper 和 Bootstrap 的 JS 插件各自獨立 -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js" integrity="sha384-gRC4eoaRyQ8xv2X6Mnf+eOIrtON3wId3dAkwO0HQX26OrFBoLpjX/XWOJacSiZhL" crossorigin="anonymous"></script>
    -->
  </body>
</html>

數(shù)據(jù)庫使用sqlite3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奉芦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剧蹂,更是在濱河造成了極大的恐慌声功,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宠叼,死亡現(xiàn)場離奇詭異先巴,居然都是意外死亡,警方通過查閱死者的電腦和手機车吹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門筹裕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窄驹,你說我怎么就攤上這事朝卒。” “怎么了乐埠?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵抗斤,是天一觀的道長。 經(jīng)常有香客問我丈咐,道長瑞眼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任棵逊,我火速辦了婚禮伤疙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己徒像,他們只是感情好黍特,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锯蛀,像睡著了一般灭衷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旁涤,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天翔曲,我揣著相機與錄音,去河邊找鬼劈愚。 笑死瞳遍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的造虎。 我是一名探鬼主播傅蹂,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼算凿!你這毒婦竟也來了份蝴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氓轰,失蹤者是張志新(化名)和其女友劉穎婚夫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體署鸡,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡案糙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了靴庆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片时捌。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炉抒,靈堂內(nèi)的尸體忽然破棺而出奢讨,到底是詐尸還是另有隱情,我是刑警寧澤焰薄,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布拿诸,位于F島的核電站,受9級特大地震影響塞茅,放射性物質(zhì)發(fā)生泄漏亩码。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一野瘦、第九天 我趴在偏房一處隱蔽的房頂上張望描沟。 院中可真熱鬧,春花似錦、人聲如沸啊掏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迟蜜。三九已至,卻和暖如春啡省,著一層夾襖步出監(jiān)牢的瞬間娜睛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工卦睹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留畦戒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓结序,卻偏偏與公主長得像障斋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子徐鹤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容