溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django框架

發布時間:2020-07-31 17:26:58 來源:網絡 閱讀:1257 作者:sjingx 欄目:編程語言

一、Django的下載與基本命令

1.下載Django

pip install django

2. 創建一個django project

django-admin.py startproject mysite
[mysite 項目名稱]
django框架
當前目錄下會成mysite的工程,目錄結構如下:

  • manage.py ----- Django項目里面的工具,通過它可以調用django shell和數據庫等
  • setting.py ----- 包含了項目的默認設置,包括數據庫信息,調用標志以及其他一些工作
  • urls.py ----- 負責把URL模式映射到應用程序

3.在mysite目錄下創建應用

py manage.py startapp app01

當前目錄下會成mysite的工程,目錄結構如下:
django框架

4. 啟動django項目

方法一:在cmd終端輸入
python manage.py runserver 8080
方法二:在pycharm中點擊Run運行

5.簡單例子

瀏覽器輸入網址urls下的path匹配到路徑之后,在視圖views中執行指定的函數
注意:html文件要放在templates文件下面

# urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('timer/', views.timer),
]
# views.py
def timer(request):
    import time
    date = time.time()
    return render(request,"timer.html", {"date":date})

# templates/timer.html
當前時間:{{ date }}

二、靜態文件配置

作為一個網站應該要把js和css文件放在服務器端,而不是簡單的放在timer.html同一個目錄下

  1. 在project中創建一個static的文件夾(能static就是static,別用其他的名字)
  2. 將js和css的文件放到static的文件夾中
  3. 在setting.py中加入STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    ]

4.是否只能用STATICFILES_DIRS,是的錯一個都不行

文件結構:
|---mysite
    |---app01
    |---demo
    |---static
        |---jquer-3.3.1.min.js
        |---app01
            |---timer.css
            |---timer.js
    |---templates
        |---timer.html

# mysite/setting.py

STATIC_URL = "/static/"

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"), # 自定義靜態文件(statics名稱盡量和默認保持一致)
]

將css和js分別放入app01文件夾中

timer.html中引入css和js文件

在瀏覽器中輸入http://127.0.0.1:8000/static/jquery-3.3.1.min.js 查看是否可以找到jQuery文件

三、路由控制

1. 簡單配置

路由的配置就是哪一個路徑由哪一個視圖函數處理
舉個例子比如檔案庫中有2003,2004~2018的檔案進行分類,如果不用路由控制那就會出現下面這樣的情況。

# mysite/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('timer/', views.timer),

    re_path(r'^articles/2003/$', views.special_case_2003),
    re_path(r'^articles/2004/$', views.special_case_2003),
    re_path(r'^articles/2005/$', views.special_case_2003),
    re_path(r'^articles/2018/$', views.special_case_2003),
]

那使用路由控制之后應該是什么情況呢

# mysite/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('timer/', views.timer),

    re_path(r'^articles/2003/$', views.special_case_2003),
    re_path(r'^articles/([0-9]{4})/$', views.special_year), # 一個分組相當于多傳一個參數,special_year(request,year)
    re_path(r'^articles/([0-9]{4})/([0-9]{2})/$',views.mouth_archive),
    re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)$', views.archive_detail),
]

# app01/views.py
def special_case_2003(request):
    return HttpResponse('special_case_2003')

def year_archive(request,year):
    return HttpResponse(year)

def mouth_archive(request,year,mouth):
    return HttpResponse(year,mouth)

def archive_detail(request,year,mouth,day):
    return HttpResponse(year,mouth,day)

注意:

  • 若要從URL中捕獲一個值,只需要在它周圍放置一對圓括號。
  • 不需要添加一個前導的反斜桿,因為每個URL都有。例如,應該是^articles而不是^/articles。
  • 每個正則表達式前面的'r'是可選的但是建議加上。它告訴Python這個字符串是"原始的" -- 字符串中任何字符都不應該轉義

2. 有名分組

在分組中添加:?P<變量名稱>

urlpatterns = [
    re_path(r'^articles/(?P<y>[0-9]{4})/(?P<m>[0-9]{2})/$',views.mouth_archive),
]

在瀏覽器中輸入http://127.0.0.1:8000/app01/2003/03/,就表示mouth_archive(request,y=2003,m=03),
就好比函數中固定參數傳值一樣

3. 分發

  • 假如我們項目中有10個應用,每個應用都是100個URL,那所有的路由控制都會在全局的urls.py文件中增加耦合度
  • 分發的作用就是對每個app進行解耦,把各自的app的url放到各自的文件夾下
# mysite/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('timer/', views.timer),

    re_path(r'app01/',include("app01.urls"))
]

# app01/urls.py
urlpatterns = [
    re_path(r'^articles/([0-9]{4})/([0-9]{2})/$',views.mouth_archive),
]

4. 登陸驗證示例

  • 為了測試我們需要先注釋掉setting.py文件下的django.middleware.csrf.CsrfViewMiddleware
  • 當我們寫好頁面的時候按F12可以查看login是get的請求,當點擊按鈕后變成POST請求
# 在template中創建一個login.html

<form action="{% url 'LOG' %}" method="post">
    用戶名:<input type="text", name="user">
    密碼:<input type="password" name="pwd">
    <input type="submit" name="" id="">
</form>

# mysite/urls.py
# name='LOG'指的就是給login/起的別名
path('login/', views.login, name='LOG'),

5.PATH

6.視圖部分

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女