Web開發之django(一基礎篇)

什麼是web框架?框架,即framework,特指爲解決一個開放性問題而設計的具備必定約束性的支撐結構,使用框架能夠幫你快速開發特定的系統,簡單地說,就是你用別人搭建好的舞臺來作表演。對於,全部的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。############################################################################################基本配置1、建立django程序終端命令:django-admin startproject sitenameIDE建立Django程序時,本質上都是自動執行上述命令其餘經常使用命令:  python manage.py runserver 0.0.0.0  python manage.py startapp appname  python manage.py syncdb  python manage.py makemigrations   python manage.py migrate    python manage.py createsuperuser2、靜態文件STATICFILES_DIRS = (        os.path.join(BASE_DIR,'static'),    )MVC和MTV模式:著名的MVC模式:所謂MVC就是把web應用分爲模型(M),控制器(C),視圖(V)三層;他們之間以一種插件似的,鬆耦合的方式鏈接在一塊兒。模型負責業務對象與數據庫的對象(ORM),視圖負責與用戶的交互(頁面),控制器(C)接受用戶的輸入調用模型和視圖完成用戶的請求。Django的MTV模式本質上與MVC模式沒有什麼差異,也是各組件之間爲了保持鬆耦合關係,只是定義上有些許不一樣,Django的MTV分別表明:            Model(模型):負責業務對象與數據庫的對象(ORM)            Template(模版):負責如何把頁面展現給用戶            View(視圖):負責業務邏輯,並在適當的時候調用Model和Template此外,Django還有一個url分發器,它的做用是將一個個URL的頁面請求分發給不一樣的view處理,view再調用相應的Model和Template一,Django URL(路由系統)URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL模式以及要爲該URL模式調用的視圖函數之間的映射表;你就是以這種方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼。1 urlpatterns = [2    url(正則表達式, views視圖函數,參數,別名),3 ]參數說明:一個正則表達式字符串一個可調用對象,一般爲一個視圖函數或一個指定視圖函數路徑的字符串可選的要傳遞給視圖函數的默認參數(字典形式)一個可選的name參數url實例:from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [    url(r'^articles/2003/$', views.special_case_2003),    #url(r'^articles/[0-9]{4}/$', views.year_archive),    url(r'^articles/([0-9]{4})/$', views.year_archive),  #no_named group    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),]from django.conf.urls import urlfrom app01 import viewsurlpatterns = [    url(r'^articles/2003/$', views.special_case_2003),    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),]二,Models數據庫的配置1 django默認支持sqlite,mysql, oracle,postgresql數據庫。django默認使用sqlite的數據庫,默認自帶sqlite的數據庫驅動, 引擎名稱:django.db.backends.sqlite32 mysql驅動程序    MySQLdb(mysql python)    mysqlclient    MySQL    PyMySQL(純python的mysql驅動程序)3 在django的項目中會默認使用sqlite數據庫,在settings裏有以下設置:若是咱們想要更改數據庫,須要修改以下:DATABASES={    'default':{        'ENGINE':'django.db.backends.mysql',        'NAME':'django"_com',        'USER':'root',        'PASSWORD':'password',        'HOST':'......',        "PORT":'......',    }}三,Template基礎(模板系統的介紹)模版的組成組成:HTML代碼+邏輯控制代碼邏輯控制代碼的組成1  變量(使用雙大括號來引用變量): {{var_name}}   深度變量的查找(萬能的句點號)2 標籤(tag)的使用(使用大括號和百分比的組合來表示使用tag){% if %} 的使用:{% if %}標籤計算一個變量值,若是是「true」,即它存在、不爲空而且不是false的boolean值,系統則會顯示{% if %}和{% endif %}間的全部內容{% if num >= 100 and 8 %}    {% if num > 200 %}        <p>num大於200</p>    {% else %}        <p>num大於100小於200</p>    {% endif %}{% elif num < 100%}    <p>num小於100</p>{% else %}    <p>num等於100</p>{% endif %}{% for %}的使用{% for %}標籤容許你按順序遍歷一個序列中的各個元素,每次循環模板系統都會渲染{% for %}和{% endfor %}之間的全部內容< ul >{ %for obj in list %}    < li > {{obj.name}} < / li >{ % endfor %}< / ul >{%csrf_token%}:csrf_token標籤用於生成csrf_token的標籤,用於防治跨站攻擊驗證。注意若是你在view的index裏用的是render_to_response方法,不會生效其實,這裏是會生成一個input標籤,和其餘表單標籤一塊兒提交給後臺的。{% url %}:  引用路由配置的地址{% with %}:用更簡單的變量名替代複雜的變量名{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}{% verbatim %}: 禁止render{% load %}: 加載標籤庫3 自定義filter和simple_taga、在app中建立templatetags模塊(必須的)b、建立任意 .py 文件,如:my_tags.pyc、在使用自定義simple_tag和filter的html文件中導入以前建立的 my_tags.py :{% load my_tags %}d、使用simple_tag和filter(如何調用)e、在settings中的INSTALLED_APPS配置當前app,否則django沒法找到自定義的simple_tag.from django import templatefrom django.utils.safestring import mark_saferegister = template.Library()   #register的名字是固定的,不可改變@register.filterdef filter_multi(v1,v2):    return  v1 * v2@register.simple_tagdef simple_tag_multi(v1,v2):    return  v1 * v2@register.simple_tagdef my_input(id,arg):    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)    return mark_safe(result)-------------------------------.html{ % load xxx %}  # 首行# num=12{{num | filter_multi: 2}}  # 24{{num | filter_multi: "[22,333,4444]"}}{ % simple_tag_multi 2 5 %}  參數不限, 但不能放在if for語句中{ % simple_tag_multi num 5 %}4 extend模板繼承{ % extends "base.html" %}{ % block title %}The current time{ % endblock %}{ % block content %}< p > It is now {{current_date}}. < / p >{ % endblock %}四,Views(視圖函數)HttpResponse:傳入一個數據,返回一個字符串render(request,"xxx.html",{"obj":xx_"list"}    一、找到html模版,open函數打開獲取到內存    二、Django的模版引擎: html模版的內容 + 數據 => 渲染(替換) ===》 最終字符串    三、HttpResponse(最終字符串)redirect:頁面跳轉。request請求(Request對象的屬性和方法):path:       請求頁面的全路徑,不包括域名method:     請求中使用的HTTP方法的字符串表示。全大寫表示。GET:         包含全部HTTP GET參數的類字典對象POST:       包含全部HTTP POST參數的類字典對象COOKIES:     包含全部cookies的標準Python字典對象;keys和values都是字符串。session:    惟一可讀寫的屬性,表明當前會話的字典對象;本身有激活Django中的session支持時該屬性纔可用。FILES:      包含全部上傳文件的類字典對象;