2.藉助於第三方模塊幫你擼css
wsgiref模塊 web服務網關接口html
幫你封裝了socket前端
幫你處理了HTTP數據 直接封帳成一個大字典python
也是flask的啓動源碼mysql
django字典的模板 自己可以承受的併發量很低 大概1000左右web
3.基於上面的代碼按照功能的不一樣拆封成不一樣的文件夾sql
urls.py 路由與視圖函數對應關係(視圖函數可使函數也能夠是類)數據庫
views.py 一推處理業務邏輯的視圖函數django
templates 放html文件flask
若是想要增長一個功能,只要在兩個文件中作改動便可。首先在urls.py中新增一組對應關係
4.動靜態網頁
html頁面上的數據是不是寫死的仍是後端動態獲取的
5.後端獲取時間展現到HTML頁面 直接利用字符串的替換完成
6.基於jinja2模板語法,實現後端給HTML頁面傳值
模板語法是在後端生效的,瀏覽器是沒法識別模板語法,全部的數據渲染所有都是在後端事先生成好的 ,晚會將完整的HTML頁面
變量相關 {{}}
邏輯相關 {%%}
7.利用jinja2實現前端 後端 數據庫三者結合
8.簡易版本的web框架請求流程圖
python三大主流框架
django:大而全
flask:小而精
tornado:異步非阻塞
django簡介:
注意事項:
1.計算機的名稱不能有中文
2.之後索引項目名稱也不要有中文
3.python解釋器不要使用python3.7 建議使用3.4-3.6
4.一個python窗口只能跑一個項目
版本問題:
1.X 2.X 版本之間有必定的區別
統一使用1.11.11版本,暫時不要使用虛擬環境
pip3 install django==1.11.11
django-admin
建立項目:django-admin startproject mysite
啓動項目:首先須要切換到項目目錄 cd /masite
python3 manage.py runserver #默認是本機的8000端口
python3 manage.py runserver 127.0.0.1:8888
建立app:
app就是相似於具體功能的劃分
python3 manage.py startapp day01#APP的名字也應該作到見名知意
命令行建立django項目,默認不會主動建立templates文件夾,而且settings配置文件中也沒有該文件夾的路徑配置。
須要手動配置:DIR:[os.]
建立app須要注意的事項
小白必會三板斧
HTTPresponse 返回字符串
render 返回HTML文件而且支持傳值
redirect 重定向 能夠寫本網站的路徑後綴 還能夠寫其餘網站的全路徑
1.默認狀況下全部的HTML文件都是放在templates文件夾裏
2.什麼是靜態文件:
網站所使用到的提早寫好的css js 第三方的前端模塊 圖片 都叫靜態資源
3.默認狀況下網站所用到的靜態文件資源都會放在static文件夾下
一般狀況下,在static文件夾內還會建立其餘文件夾
css 文件夾
js 文件夾
font 文件夾
img 文件夾
bootstrap 文件夾
fontawesome 文件夾
爲了更加方便的管理文件
django中須要本身手動建立靜態文件存放的文件夾
STATIC_URL = '/static/' #訪問靜態文件資源接口前綴 一般狀況下接口的前綴名也叫static 若是後綴是static 就拿路徑到下面的文件夾下找 #手動開設靜態文件訪問資源 STATICFILES_DIRS=[ os.path.join(BASE_DIR,'static')# 將static文件裏面全部的資源暴露給用戶 能夠有多個,自上往下查找 ]
4.靜態文件動態綁定
{% load static %} <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>
form表單默認是get請求,而且get請求也是可以攜帶參數的
http://127.0.0.1:8000/login/?username=jason&password=jason123 #特色:url?xxx=xxx&yyy=yyy 1.攜帶的數據不安全 2.攜帶的數據大小有限制,4KB左右 3.一般只會攜帶一些不是很重要的數據
form表單裏的action參數
1.不寫,默認朝當前地址提交
2.只寫後綴,/index
3.寫全路徑
前期在朝後盾提交post請求出現403的狀況,須要去配置文件中註釋掉一行內容
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', ]
視圖函數必須有返回值而且返回值都是HTTPresponse對象(render,HttpResponse,redircet都是HTTPresponse對象)
django後端的視圖函數,默認處理的是get請求。但不管是發get仍是post請求,都會執行視圖函數。
get請求指向拿到login頁面,post請求想提交數據,而後後端作校驗
如何判斷當前請求方式
request.method 拿到的是字符串大寫的請求方式 GET POST
if request.method == "POST": return HttpResponse('收到了') return render(request,'login.html')
request.method 獲取請求方式,而且是純大寫的字符串 如何獲取用戶提交的post請求數據: request.POST request.POST.get() #默認只會獲取列表最後一個元素,裏面要寫屬性名 request.POST.getlist() #獲取列表,裏面要寫屬性名 如何獲取用戶提交的get請求數據: request.GET request.GET.get() #默認只會獲取列表最後一個元素,裏面要寫屬性名 request.GET.getlist() #獲取列表,裏面要寫屬性名
有兩部操做:
1.配置文件配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql',#指定數據庫類型 'NAME': 'day50',#指定庫的名字 'USER':'root',#注意 全部的鍵都是全大寫 'PASSWORD':'', 'HOST':'127.0.0.1', 'PORT':3306, 'CHARSET':'utf8' } }
2.主動告訴django,不要用默認的MySQLdb鏈接,而是用pymysql
能夠在項目名下的__init__.py
中書寫,也能夠在應用名下的__init__.py
中書寫
import pymysql pymysql.install_as_MySQLdb()
爲何要使用數據庫:
可以讓不會數據庫操做的人也能簡單方便去操做數據庫
orm的缺點:
封裝程度高,有時會出現查詢效率偏低的問題。
因此工做中:簡單的用orm 複雜的追求速度 須要手動書寫SQL語句
django中如何操做orm
書寫模型類,去應用下的models.py中書寫模型類(就是類)
注意:
以後在寫django項目的時候,一個django就對應一個數據庫,不要出現多個項目使用同一個數據庫的狀況
數據庫遷移(同步)命令:
1. python3 manage.py makemigrations #將數據庫的修改記錄到小本本上(migrations文件內) 2. python3 manage.py migrate #將修改操做正在同步在數據庫中 注意: 上面兩條命令必須是成雙成對出現的,只要修改了models裏面跟數據庫相關的代碼,就必須從新執行上面的兩條命令
class User(models.Model): id=models.AutoField(primary_key=True)#django當你不指定主鍵的時候,會自動幫你建立一個id字段,而且做爲主鍵,若是本身建立了,django就不會幫你建立 username=models.CharField(max_length=255)#charField必需要指定max_length參數,CharField就是mysql的varchar password=models.CharField(max_length=32) #設置默認值 #方式一: email=models.EmailField(default='123@qq.com') #方式二: phone=models.BigIntegerField(null=True) #還能夠直接在提示中給默認值,
字段的修改:
直接修改代碼,而後執行數據庫的遷移命令(兩條一條不能少)
字段的增長:
方式一:設置默認值 default=‘嘻嘻嘻’
方式二:容許字段爲空 null=True
字段的刪除:
直接註釋掉對應的字段,而後再執行數據庫的遷移命令
數據的查
data=models.User.objects.filter(username=username,password=password)## <QuerySet [<User: User object>]> user_list = models.User.objects.all()# 等價models.User.objects.filter() 全部數據都查出來 裏面是一個個的數據對象 user_obj=data[0] user_obj.username fileter返回的結果是一個「列表」,裏面纔是數據對象,filter括號內能夠放多個關鍵字參數,這多個關鍵參數在查詢的時候是and關係
數據的增
models.User.objects.create(username=username,password=password)# create方法 會有返回值 返回值就是當前被建立的數據對象自己
數據的改
models.User.objects.filter(id=edit_id).update(username=username,password=password) #批量操做,會將filter查詢出來的列表中全部的對象都更新
數據的刪
models.User.objects.filter(id=delete_id).delete() #批量操做,會將filter查詢出來的列表中全部的對象都刪除