Django簡介、安裝、配置、遷移命令

[TOC]css

1、Django簡介

django安裝

版本問題
	1.X    2.X
	統一制定1.11.11
安裝
	pip3 install django==1.11.11
測試
	django-admin

wsgiref模塊

wsgiref模塊能根據功能的不一樣拆分紅不一樣的文件,用戶在瀏覽器窗口輸入url之因此能狗獲取到相應的資源,是由於後端早已經開設了相應 資源接口。html

wsgiref特色:前端

  1. 先在urls文件中寫url與函數的對應關係
  2. 再去views文件中寫對應的函數功能塊

urls.py:路由與屬性函數的對應關係python

views.py:裏面就是放的一堆視圖函數(視圖函數也能夠是函數也能夠是類)mysql

templates文件夾:裏面放的就是一堆HTML文件(模板文件夾)web

大白話:wsgiref模塊做用是幫你將複雜的socket鏈接封裝,將用戶輸入的數據作處理,並把後端發送給瀏覽器的數據也作處理。sql

from wsgiref.simple_server import make_server

動靜態網頁

靜態網頁

數據是寫死的,萬年不變數據庫

動態網頁

數據是動態獲取的:django

  1. 獲取檔期那時間
  2. 從數據庫中獲取數據

jinja2模塊

提供了一個能夠在HTML頁面上書寫相似於python後端的 代碼,來操做數據(模板語法)flask

pip3 install jinja2 下載安裝模塊

flask框架模板語法使用的就是jinja2模塊,因此只要下載了flask框架,就會自動下載jinja2模塊。

模板語法(jinja2)模塊語法很是貼近python語法,可是並非全部的框架使用的都是jinja2模塊語法

模板語法
		{{}}  變量相關
		{%%}  邏輯相關


在HTML文件內的語法示例:

{{ xxx }}
<p>{{xxx.username}}</p>
<p>{{xxx['password']}}</p>
<p>{{xxx.get('hobby')}}</p>
<p>{{xxx.get('hobby')[0]}}</p>
<p>{{xxx.get('hobby').1}}</p>


{%for user_dict in xxx %}
    <tr>
        <td>{{ user_dict.id }}</td>
        <td>{{ user_dict.name }}</td>
        <td>{{ user_dict.hobby }}</td>
    </tr>
{% endfor %}

web框架

A:socket
	B:路由分發
	C:模板渲染
		django
			A:用的別人的  wsgiref
			B:本身寫的
			C:本身寫的
		flask
			A:用的被人的  werkzeug
			B:本身寫的
			C:用的別人的  jinja2
		tornado
			A,B,C都是本身的。追求速度

python三大主流框架

django

  • 優勢:大而全,自身攜帶的組件和功能特別特別多,功能全面;就相似於塔吊機
  • 缺點:大嘛,因此就笨重,須要的不須要的功能都有。當你只須要蓋一間房子的時候,你會用到塔吊機嘛?

flask

  • 優勢:小而精,源碼600多行(分爲請求上下文,應用上下文),自身攜帶的組件和功能特別特別少,可是第三方支持該框架的模塊特別特別多,若是你將flask第三方模塊所有疊加起來,甚至能夠超過django
  • 缺點:常言你的優勢就是你的缺點。所以flask受限於第三方模塊,版本更新致使不兼容問題比較常見。

tornado

異步非阻塞,自然支持高併發,甚至能夠用它來開發遊戲服務器。

django框架

安裝及注意事項

  1. 注意事項

    1. 計算機名稱不能有中文
    2. 項目文件名也不能用中文
    3. 一個pycharm窗口就是一個單獨的完整的項目
  2. 版本問題

    1. 1.x版本

    2. 2.x版本

    3. 3.x版本(目前不用考慮)

      推薦使用1.x版本里面的1.11.09-1.11.13,由於2.x版本才發行不久,新公司或者更換了版本的公司纔會使用,通常使用1.8或1.11,現已逐步往1.11轉

  3. 安裝

    pip3 install django==1.11.11

  4. 測試是否安裝成功

    命令行輸入:django-admin

建立django項目

  1. 命令行

    1. 建立django項目

      語法:django-admin startproject mysite(項目名)

      效果:建立一個mysite文件夾

    2. 啓動django項目(先切換到項目目錄下)

      語法:python manage.py runserver 必須在cmd管理員啓動(django默認端口是8000)

    3. 建立具備獨立功能的app,一般狀況下應該能作到見明之義。

      語法:python manage.py startapp app名字

      在Django項目中建立好app以後必定要去settings.py註冊纔有效

      注意:

      ​ 1.使用命令行建立的django項目是不會自動建立templates模板文件夾的,只能本身手動建立

      ​ 2.命令行建立的django項目不但沒有templates文件夾,配置文件中也沒有填寫路徑(而pycharm建立會自動添加)

app的概念

全名application 應用,此app非彼app.

django實際上是一個專一於開發app的web框架,一個空的django項目就相似於一所大學,app就相似於大學裏面的各個學院。

每一個app就相似於不一樣的功能模塊

  • 購物網站
    • 用戶相關 user ---用戶相關的app
    • 訂單相關 order --- 訂單相關的app
    • 投訴相關 Complaint --- 投訴相關的app
  • 不一樣的功能模塊推薦使用不一樣的app去開發
  • django支持多app

註冊APP

django主要文件功能

mysite
	-mysite
    	--__init__.py
        --settings.py	項目配置文件
        --urls.py	路由視圖函數對應關係,項目的總路由
        --wsgi.py
    -manage.py
    app01
    	--migrations文件夾	數據庫改動記錄
        	----__init__.py
        --__init__.py
        --admin.py	django後臺管理
        --apps.py	註冊app類
        --models.py	模型類(orm)
        --tests.py	測試文件
        --view.py	視圖函數(******)
    db.sqlite3				django自帶的一個小型用於本地測試的數據庫(對日期格式的數據不是很敏感)

使用django時注意的事項

1.代碼修改了始終沒有效果:
	1.在同一個端口起了多個服務 一直跑的是最開始的那個服務
	2.瀏覽器緩存問題
2.建立app以後必定必定要先去setting文件中註冊
	1.django可以自動重啓 可是它的重啓機制
	2.只要檢測到你的代碼有變化 在必定的時間間隔內就會自動重啓
	3.因此有時候可能會出現 你代碼還沒寫完 就已經自動重啓了
	


	1.python解釋器不要用3.7及以上版本
	2.計算機名稱不能有中文
	3.文件名稱也儘可能不要用中文
	4.一個pycharm窗口就跑一個django項目

django小白必會三板斧

1.HttpResponse  返回字符串
	return HttpResponse('字符串')
 
2.render	返回html頁面
	return render(request,'templates文件夾下的html文件名',{'xxx':'hello world'})
		  頁面上就能夠經過{{xxx}}拿到hello world
		模板的渲染(將數據在後端按照模板語法放入html對應的位置)
3.redirect 	重定向
	return redirect(url)	# url能夠是別人網站的全路徑 也能夠是本身網站的url後綴
 	return redirect('/index')
 	return redirect('https://www.mzitu.com')

2、靜態文件配置

什麼是靜態文件
		網站所使用到的提早已經寫好了的文件
	eg:
		css
			js
			第三方的組件
				bootstrap
				sweetalert
				fontawesome

網站所用到的html文件統一放到templates文件夾中

那針對網站所使用到的靜態文件也應該單獨找一個文件夾來存儲

3、存放靜態文件的文件夾

這個文件夾 默認狀況下都叫static,須要手動本身建立

static
        -css
        網站所用到的全部的css文件
        -js
        網站所用到的全部的js文件
        -image
        網站所用到的全部的圖片文件
        第三方文件

4、Django配置靜態文件

1.在settings.py中配置文件

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'static1'),
    os.path.join(BASE_DIR, 'static2')
]
當你的接口前綴正確以後  會拿着後面的路徑依次去下面列表中的每個文件夾下查找對應的資源
	順序是從上往下依次查找 若是都沒有找到纔會報錯

這裏的static是文件夾路徑

那麼問題來了,若是STATIC_URL要修改,其他的所有文件都要修改,及其不方便。咱們怎麼辦呢?

咱們能夠想辦法動態綁定,讓STATIC_URL不管怎麼改變,對應的href前綴跟着改變就解決了。

2.動態綁定

{% load static %}  //相似於import導入
	<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
	<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

3.前期403註釋

5、form表單

form表單默認是以get請求提交數據的
	http://127.0.0.1:8000/login/?username=admin&password=123
	
action
		1.不寫 默認朝當前地址提交數據
		2.全路徑
		3.後綴(/index)

6、獲取前端的請求方式

request.method  # 結果是一個純大寫的字符串  GET/POST
request.POST  # 獲取post請求提交的數據     相似因而一個大字典
	# <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}>
get方法:針對只有一個值,用戶名、密碼
	request.POST.get()  # 只會取列表最後一個元素
request.POST.getlist()  # 取出整個列表,針對對選框、多個值操做

一般狀況這樣寫:

POST請求相似於一個大字典

7、pycharm鏈接MySQL

​ 須要你本身提早建立好對應的庫

1.先去配置文件中配置相關參數
	DATABASES = {
			'default': {
				'ENGINE': 'django.db.backends.mysql',  # 數據庫類別
				'NAME': 'jeff',  # 庫的名字
				'HOST':'127.0.0.1',
				'PORT':3306,
				'USER':'root',
				'password':'123',
				'CHARSET':'utf8'
			}
		}
		
2.在項目名或者應用名下面的__init__文件中告訴django使用pymysql連接數據庫而不是用默認的mysqldb
	import pymysql
	pymysql.install_as_MySQLdb()

8、django orm簡介

​ django orm不會幫你建立庫 只能幫你自動建立表

orm對象關係映射
類				表
對象			記錄
屬性			字段值
做用:可以讓一個不會數據庫操做的小白也可以經過Python面向對象語法 句點符來簡單快捷的操做數據

1.模型類

首先須要先去對應的應用下的models.py中書寫你的模型類

對於主鍵id,django orm會自動幫你建立一個名字爲id的主鍵字段。當檢測到你建立了主鍵,那麼會使用你本身建立的。若是沒有那麼會自動幫你建立。

models.py
	class User(models.Model):
		id = models.AutoField(primary_key=True)		// id int primary key auto_increment
		name = models.CharField(max_length=32)		// name varchar(32)
		password = models.IntegerField()			// password int

2.數據庫遷移命令,逆向遷移

1.python3 manage.py makemigrations  # 僅僅是將你對數據庫的改動記錄到某個小本本上(migrations文件夾)
2.python3 manage.py migrate  # 將改動真正的同步到數據庫中
"""
上面兩個命令永遠是成對出現的 只要你執行了1 就必需要執行2
"""
*******只要你動了models.py跟數據庫相關的代碼 你就必需要從新執行上面的兩條命令來保證數據庫與models.py一致***********





3.逆向數據庫到模型
python manage.py inspectdb > app名字/models.py

3.獲取用戶點擊的Id,綁定id

對於增刪改查都須要先獲取用戶選擇修改的數據id。那麼咱們怎麼獲取呢?

第一步:把用戶的id綁定到按鈕標籤上

咱們能夠拼接url:獲取用戶點擊的標籤id。綁定id
<a href="/edit_user/?edit_id={{ user_obj.id }}" class="btn btn-primary btn-xs">編輯</a>

第二步:獲取綁定到url的用戶id

4.字段的增刪改查

字段的增
	
		1.create()
			user_obj = models.User.objects.create(name=username,password=password)
			# 該方法有返回值 返回值就是當前被建立的對象自己
		2.對象綁定方法
			# 1 先生成一個User對象
			user_obj = models.User(name=username,password=password)
			# 2 調用對象的綁定方法
			user_obj.save()
字段的查
    1.filter()  //相似於where
    from app01 import models
    res = models.User.objects.filter(username='jason')  # select * from user where 
    # 返回的結果是一個列表  支持索引取值可是不支持負數而且不推薦使用 推薦你使用它給你封裝好的方法
		推薦(重):user_obj = res.first()
			# filter方法條件不存在的時候 不會報錯返回的是一個空列表
	filter括號內直接放多個關鍵字參數 而且多個關鍵字參數之間是and關係
		models.User.objects.filter(username='jason',password='123')
		相似於sql語句:# select * from user where username='jason' and password='123';
	2.查全部的數據
		1.filter() 括號內不寫拿全部
		2.all()  拿全部
字段的改 
        # 方式1(推薦)                      批量更新
		models.User.objects.filter(id=edit_id).update(name=username,password=password)
		# 方式2(瞭解)
		# 1 先獲取數據對象
		edit_obj = models.User.objects.filter(id=edit_id).first()
		# 2 再修改對象屬性
		edit_obj.name = username
		edit_obj.password = password
		# 3 調用對象的綁定方法保存
		edit_obj.save()

刪
	models.User.objects.filter(id=delete_id).delete()  # 將filter過濾出來的數據所有刪除

原文出處:https://www.cnblogs.com/guyouyin123/p/12147138.html

相關文章
相關標籤/搜索