1. 程式人生 > 其它 >Django基礎內容介紹

Django基礎內容介紹

內容回顧

  • 純手擼web框架

    藉助於scoket模組啟動服務端
    針對http協議資料自己人為處理(切割)
    
  • 藉助於wsgiref模組

    內部封裝了socket以及針對http格式資料的處理
    
  • 程式碼優化

    1.先在一個py檔案中拆分程式碼
    2.根據功能的不同拆分成了不同的py檔案和資料夾
    """拆分完成後 以後需要擴充套件功能 只需要在urls.py和views.py修改即可"""
    
  • 動靜態網頁

    核心就在於網頁上資料的來源
    
  • jinja2模板語法

    能夠支援後端將資料傳遞給html頁面並且在該頁面上使用類似於後端的語法來操作資料
    {{ name }}
    {% for i in name_list %}
    {% endfor %}
    
  • python主流web框架

    django
    flask
    tornado
    
  • Django下載與使用

    pip3 install django==1.11.11
    
    命令列操作
    	django-admin startproject mystite
        cd mysite
        python36 manage.py runserver ip:port
    	python36 manage.py startapp app01
        
    """
    django專案與app之間的關係
    	django專案是空殼子 app才是真正的核心 相當於一個獨立的功能模組
    	eg:django相當於一所大學 app相當於二級學院
    """
    
    # django啟動報錯的各種問題
    	1.python直譯器問題
        	widgets.py多了個逗號
    	2.由於版本問題導致配置檔案配置項錯誤
        	[os.path.join(BASE_DIR,'templates')]
    	3.計算機名稱和py檔案等名稱儘量不要使用中文
        
    # 命令列操作不會自動幫你建立templates資料夾並且也不會在檔案中配置
    

    內容概要

  • django主要目錄結構

  • django小白必會三板斧

  • 靜態檔案配置(登入功能)

  • requests物件方法

  • pycharm連結MySQL

  • django連結MySQL

內容詳細

django主要目錄結構

mysite資料夾
	mysite同名資料夾
    	settings.py
        	# django暴露給使用者可以自定義配置的檔案
		urls.py
        	# 存放路由(路徑)與函式(檢視函式)對應關係
		wsgi.py
        	# 依賴於wsgiref模組的socket啟動部分
	manage.py
    	# django的入口(啟動)檔案
	app01資料夾
    	migrations資料夾
        	# 裡面存放ORM針對資料庫相關的記錄
		admin.py
        	# django自帶的後臺管理功能
         apps.py
        	# 每個應用的獨立標識
         models.py
        	# 與資料庫打交道的檔案(ORM)
         tests.py
        	# 自帶的測試檔案
         views.py
        	# 該app對應的主體功能(函式 類)
	db.sqlite3
    	# django自帶的小型資料庫(針對日期格式無法精準存取)
        
"""
1.建立app之後一定要去settings.py中註冊
	INSTALLED_APPS = [
		兩種寫法:
			# 全寫
			'app01.apps.App01Config',
			# 簡寫
			'app01'
	]
2.templates路徑配置
	TEMPLATES = [
	{
		'DIRS': [os.path.join(BASE_DIR,
		'templates')]
	}
	]
"""
django是可以自動重啟的 但是有時候自動重啟的反應時間有點長

django小白必會三板斧

1.HttpResponse
	HttpResponse('hello django')
    暫且理解為可以返回給前端瀏覽器文字類的資料
2.render
	render(request,'index.html',{'n1':[1,2,3]}) # 精準傳(複雜但節省資源)
    render(request,'index.html',locals()) # 範圍傳(簡單但浪費資源)
    返回給前段瀏覽器html頁面 並且提供模板語法
3.redirect
	重定向
    redirect('https://www.baidu.com') # 可以寫全稱
    redirect('/admin/') # 也可以只寫字尾(預設補齊當前IP和PORT)
    
urls.py			存放路由和檢視函式對應關係	路由層
views.py		存放試圖函式(核心業務邏輯)	 檢視層
templates資料夾  存放html檔案				 模板層
models.py		存放與資料庫相關的程式碼(ORM)   模型層

"""
1.django預設的埠號是8000
	在同一臺機器同一時間如果需執行多個django專案 需要修改埠號
	python3 manage.py runserver IP:PORT
	pycharm自主修改
2.瀏覽器快取
	settings
		network
			disable cache
"""

靜態檔案配置

# 利用django編寫使用者登入功能
	'''為什麼前段請求不到後端的框架資源:我們沒有開設對應的資源介面'''
    針對靜態資源的路徑開設無需在urls.py中指定 只需要在配置檔案指定即可
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
    	os.path.join(BASE_DIR,'static')
	]
    
# 什麼事靜態檔案
	不會頻繁修改的檔案
    	css檔案、js檔案、第三方框架檔案、圖片
# django儲存靜態檔案
	static資料夾
    	該檔案內部還可以依據不同的功能劃分不同的區域
        	css資料夾
            js資料夾
            img資料夾
            others資料夾
            
# 進階關係
	STATIC_URL = '/static/' # 介面字首(要想訪問靜態資源 那麼路徑的字首就必須是這裡指定的)
    # 將static資料夾所有的資源開設給外界
	STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'static'),  # 資料夾名稱
        os.path.join(BASE_DIR,'static1'),  # 資料夾名稱
        os.path.join(BASE_DIR,'static2')  # 資料夾名稱
    ]
    """
    介面字首正確之後 拿著後面的路徑去列表中
    從上往下依次查詢對應的資源 找到了就不在繼續往下找
    """
    
# 介面字首動態匹配(寫在html檔案中)
	{% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

網路請求方式

1.get請求
	朝別人要資料
    eg:瀏覽器位址列輸入www.baidu.com回車
        get請求沒有請求體
        但get請求可以攜帶一些額外的引數 但是大小有限制(2KB)
        url?xxx=yyy&aaa=bbb
        
2.post請求
	朝別人提交資料
    eg:使用者註冊登入填寫完身份資料之後提交
        post請求有請求體
        post請求也可以攜帶資料 並且大小沒有限制 在請求體中

form表單重要引數

action # 控制資料提交的地址
	1.寫全路徑 https://www.baidu.com
	2.寫字尾(ip和埠號自動補全當前伺服器) /index/
    3.不寫	提交給當前頁面所在的地址
method # 控制資料提交的方式
	get form表單預設是get請求
    post
    
"""
注意使用django前期在提交post請求之前需要去配置檔案中註釋掉一行程式碼
	MIDDLEWARE = [
    	# 'django.middleware.csrf.CsrfViewMiddleware',
	]
"""

requests物件方法

request.method	# 獲取請求方式名(純大寫的字串)
request.POST	# 獲取post請求提交的普通資料
	request.POST.get() # jason
    request.POST.getlist()
request.GET	# 獲取get請求url問號後面的資料
	request.GET.get()
    request.GET.getlist()
    
def login(request):  
    if request.method == 'POST':
        username = request.POST.get('username')  # 預設只會取列表最後一個元素
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            return HttpResponse('OK')
        else:
            return HttpResponse('使用者名稱或密碼錯誤')
    return render(request, 'login.html')

pycharm連結MySQL

database選項-new-Data Source-選擇資料庫

django連結MySQL(重點)

# 第一步配置
DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'db8',
        'USER':'root',
        'PORT':3306,
        'HOST':'127.0.0.1',
        'PASSWORD':'123',
        'CHARSET':'utf8'
    }
}
# 第二部配置(3.6及以下直譯器 需要額外的配置)
import pymysql
pymysql.install_as_MySQLdb()
'''只要是__init__檔案即可 專案的 應用的都可以'''