day50 django

昨日惠顧

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

mysite的文件夾,裏面有一個文件夾(跟項目名同名)加一個manage.py

啓動項目:首先須要切換到項目目錄 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方法初始

request.method	獲取請求方式,而且是純大寫的字符串
如何獲取用戶提交的post請求數據:
	request.POST
    request.POST.get()	#默認只會獲取列表最後一個元素,裏面要寫屬性名
    request.POST.getlist()	#獲取列表,裏面要寫屬性名
 如何獲取用戶提交的get請求數據:
	request.GET
    request.GET.get()	#默認只會獲取列表最後一個元素,裏面要寫屬性名
    request.GET.getlist()	#獲取列表,裏面要寫屬性名

pycharm鏈接數據庫

django鏈接mysql

有兩部操做:
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()

django orm簡介

爲何要使用數據庫:
​ 可以讓不會數據庫操做的人也能簡單方便去操做數據庫

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查詢出來的列表中全部的對象都刪除
相關文章
相關標籤/搜索