PythonWeb框架之Django

Django

  簡介:html

  Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MTV的框架模式,即模型Model,模板Template和視圖View。此框架設計模式借鑑了MVC框架的思想,MVC是軟件工程中的一種軟件架構模式,把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller),具備耦合性低、重用性高、生命週期成本低等優勢。python

        

  下載:正則表達式

  官網下載頁面:https://www.djangoproject.com/download/django

 

  安裝:以Windows爲例,設計模式

    其餘操做系統的安裝參考:http://www.runoob.com/django/django-install.html瀏覽器

cmd命令:等號後面填寫要下載的版本號
pip install django==1.11.9

  建立一個Django項目:session

cmd命令:
django-admin startproject 項目名稱

 

  啓動Django項目:架構

在Django項目目錄下運行命令:
python manage.py runserver IP:端口

 

  配置settings.py文件:app

    1,模板文件框架

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "template")],  # template文件夾位置
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

    2,靜態文件

STATIC_URL = '/static/'  # HTML中使用的靜態文件夾前綴
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),  # 靜態文件存放位置
]

 

    3,csrf中間件:用於驗證用戶表單提交,剛開始使用能夠先註釋掉,方便測試

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

  Django基礎使用工具:

from django.shortcuts import HttpResponse, render, redirect

    1,HttpResponse

# 接收一個字符串參數,返回給瀏覽器
def test(request):
    return HttpResponse("OK")

    2,render

# 接收一個request參數和模板文件,動態填充數據給模板文件時,
還能夠添加一個字典類型的參數,這些數據能夠在模板文件中經過特定格式拼接到文件中而後返回給瀏覽器。
def test(request): return render(request, "test.html", {"name": "tom", "age": 18})

    3,redirect

# 接收一個URL參數,會跳轉到此URL進行訪問。
def test(request):
    return redirect("/test/")  # 能夠是外網的URL也能夠是當前項目中的URL

 

 

  APP功能模塊:

  一個Django項目能夠分爲多個APP,用來隔離項目中不一樣功能模塊的代碼。 

    1,建立app

# 命令行運行
python manage.py startapp app名字

 

  路由系統:

URL與視圖系統之間的映射關係。

1,映射格式

# 在urls.py文件中
from django.conf.urls import url

urlpatterns = [
     url(正則表達式, views視圖函數,參數,別名),
]

url參數:

  • 正則表達式:一個正則字符串,用於匹配請求的url 
  • views視圖函數:一個定義好的視圖函數,用於處理對應的url請求
  • 參數:能夠不傳,一個字典類型的數據,用於給視圖函數傳遞默認參數
  • 別名:能夠不傳,name=值,給映射起別名,用於其餘地方經過別名獲取url

2,正則分組匹配

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^test/([0-9]{4})/$', views.test),
]

正則表達式分組匹配(經過圓括號)能夠捕獲URL中的值並以位置參數形式傳遞給視圖。

3,分組命名匹配

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^test/(?P<num>[0-9]{4})/$', views.test),
]

 

分組命名匹配的正則表達式組能夠捕獲URL中的值並以關鍵字參數形式傳遞給視圖。

ps:視圖函數經過參數接收到的數據都是字符串格式的!

分組命名匹配能夠傳遞關鍵字參數,那麼就能夠在視圖函數指定默認參數來提供默認值。例如:

# urls.py中
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^blog/$', views.page),
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]

# views.py中,能夠爲num指定默認值
def page(request, num="1"):
    pass

 

4,include方法

當有多個APP功能模塊時,url映射關係都寫在項目目錄下的urls.py中就比較容易混亂,因此通常會在對應的APP下面新建一個urls.py來設定自身的映射。這時候就能夠使用include在項目urls.py中給不一樣的url請求指定對應的APP下面的urls.py,從而完成不一樣功能請求的匹配。

from django.conf.urls import include, url

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^blog/', include('blog.urls')),   # 指定到博客功能APP下面的urls
   url(r'^news/', include('news.urls')),   # 指定到新聞功能APP下面的urls
]

 

5,別名的使用

  1. 在項目函數中獲取對應的url匹配:經過reverse來完成反向解析
    url(r'^home', views.home, name='home'),  # 給個人url匹配模式起名爲 home
    
    # 在函數中引用
    from django.urls import reverse
    
    reverse("home")

     

  2. 在模板文件中引用
    {% url 'home' %} 

 當進行分組匹配時,就會須要參數,這時的引用方式爲:

# 函數中
reverse('別名', args=(參數, ))

# 模板中
{% url '別名' 參數 %}

命名空間模式:能夠經過命名空間能夠在不一樣的APP中解析出惟一的URL。

# 項目目錄下的urls.py
from django.conf.urls import url, include
 
urlpatterns = [
    url(r'^app01/', include('app01.urls', namespace='app01')), 
    url(r'^app02/', include('app02.urls', namespace='app02')),
]

解析使用方式:

# 函數中使用
reverse('app01:別名')  # 解析出app01下面的某個分組匹配對應的url

# 模板中使用
{% url 'app01:別名' %}
相關文章
相關標籤/搜索