django基礎02
文章目錄
django基礎02
1、使用虛擬環境建django項目
-
1、workon 虛擬環境命令
-
2、創建django項目 django-admin starproject 項目名
-
3、創建app python manage.py startapp 應用名
-
4、更改配置
-
注冊app
-
更改大路由包含所有的小app里的路由
-
app里寫url和對應的views
-
libs 存放第三方包
-
media 靜態文件
-
utils 存放自己的方法 可以公用的
① 、為了方便管理app,我們添加專門的apps文件夾來存放所有的app。結構如下
1.1設置完apps文件夾以后我們需要對配置文件做相應的更改
1.1.1、在seetings.py里添加django文件的導包路徑
#settings.py
import sys
sys.path.insert(0, os.path.join(BASE_DIR,'apps'))
1.1.2、django的導包路徑添加完畢,這時候可以像原來一樣引用文件了。但是這時候你的pycharm編輯器還是不能正確的顯示導包總是給你報紅。
1.1.3、這時候你需要把apps這個文件夾設為源碼根即可解決這個問題
②、添加libs存放第三
③、添加utils文件夾存放封裝的公用
④、添加media存放圖片
⑤、創建static手機模板的靜態文件
2、添加sys.path的作用?
? import sys
? sys.path.insert(0, os.path.join(BASE_DIR, ‘apps’))
? 增加導包路徑
3、base_dir的作用?
? manage.py文件的路徑
4、RESTFUL風格API
1.1 什么是RESTful
-
REST與技術無關,代表的是一種軟件架構風格(REST是Representational State Transfer的簡稱,中 文翻譯為“表征狀態轉移”)
-
REST從資源的角度類審視整個網絡,它將分布在網絡中某個節點的資源通過URL進行標識
-
所有的數據,不過是通過網絡獲取的還是操作(增刪改查)的數據,都是資源,將一切數據視為資 源是REST區別與其他架構風格的最本質屬性
-
對于REST這種面向資源的架構風格,有人提出一種全新的結構理念,即:面向資源架構(ROA: Resource Oriented Architecture)
1.2web開發本質
- 對數據庫中的表進行增刪改查操作
- Restful風格就是把所有數據都當做資源,對表的操作就是對資源操作
- 在url同通過 資源名稱來指定資源
- 通過 get/post/put/delete/patch 對資源的操作
5、RESTFUL API設計規范
-
1.API與用戶的通信協議,總是使用HTTPs協議。
-
2.域名
1)子域名方式
https://api.example.com 盡量將API部署在專用域名(會存在跨 域問題)
https://www.example.com2)url方式
https://example.org
https://example.org/api/ API很簡單
- 3.版本
URL,如:https://api.example.com/v1/
請求頭 跨域時,引發發送多次請求
- 4.面向資源編程 : 路徑,視網絡上任何東西都是資源,均使用名詞表示(可復數)
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
- 5.method
GET(查詢數據) # 從服務器取出資源(一項或多項)
POST(創建數據) # 在服務器新建一個資源
PUT(修改數據) # 在服務器更新資源(客戶端提供改變后的完整資源)
PATCH(修改屬性) # 在服務器更新資源(客戶端提供改變的屬性)
DELETE(刪除數據) # 從服務器刪除資源
- 6.過濾,分頁,排序 :通過在url上傳參的形式傳遞搜索條件
https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量
https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置
https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數
https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪個屬性排序, 以及排序順序
https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件
- 狀態碼
'''1. 2XX請求成功'''
# 200 請求成功,一般用于GET與POST請求
# 201 Created - [POST/PUT/PATCH]:用戶新建或修改數據成功。
# 202 Accepted - [*]:表示一個請求已經進入后臺排隊(異步任務)
# 204 NO CONTENT - [DELETE]:用戶刪除數據成功。
'''2. 3XX重定向'''
# 301 NO CONTENT - 永久重定向
# 302 NO CONTENT - 臨時重定向
'''3. 4XX客戶端錯誤'''
# 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤。
# 401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
# 403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。
# 404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄。
# 406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格 式)。
# 410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。
# 422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。
'''4. 5XX服務端錯誤'''
# 500 INTERNAL SERVER ERROR - [*]:服務器內部錯誤,無法完成請求
# 501 Not Implemented 服務器不支持請求的功能,無法完成請求
更多狀態碼參考:https://www.runoob.com/http/http-status-codes.html
6、django和Drf的不同點
django中封裝了drf
view 是 父類
class test1(View):
def post(self,request):
data=request.POST.get('name')
return HttpResponse(data)
def get(self,request):
data = request.GET.get('name')
return HttpResponse(data)
apiview是view的子類
class test2(APIView):
def get(self,request):
data=request.query_params
return Response(data)
def post(self,request):
data=request.data
return Response(data)
7、django不使用序列化器來進行查詢結果序列化
# from django.http import JsonResponse
# from django.views import View
# from .models import *
# class App03(View):
# def get(self,request):
# user=User.objects.all()
# list=[]
# for i in user:
# data={
# 'name':i.username,
# 'age':i.age,
# 'home':i.home
# }
# list.append(data)
# print(list)
# return JsonResponse({'data':list})
8、DRF使用Serializer來進行序列化和反序列化操作
1、定義一個序列化器
# 這里的字段需要和模型類中的字段名、字段類型、約束一致
class UserSer(serializers.Serializer):
username=serializers.CharField(max_length=20)
age=serializers.IntegerField(allow_null=True)
home=serializers.CharField(max_length=30)
想要添加數據 就需要在序列化器類中定義一個create()方法
def create(self, validated_data):
'''
序列化器進行新增數據的方法
:param validated_data: 通過驗證的字典數據
:return:根據RESTful設計方式,需要將添加的數據返回
'''
return User.objects.create(**validated_data)
想要修改數據時,需要在序列化器類中定義一個update()方法。
def update(self,instance,validated_data):
'''
序列化器進行修改數據的方法
:param instance: 需要修改的模型對象
:param validated_data: 前端傳遞的字典數據
:return: 根據RESTful設計方式,需要將修改的數據返回
'''
# instance 你的數據庫里的模型
# validated_data 傳進來要修改的數據
instance.username=validated_data.get('username',instance.username)
instance.age=validated_data.get('age',instance.age)
instance.home=validated_data.get('home',instance.home)
instance.save()
return instance
單一字段驗證 對單一字段進行驗證我們需要在序列化器類中定義一個名字為(validate_字段名)的方法,來補充驗證邏輯。
# def validated_username(self,attrs):
# if attrs !='gy':
# raise serializers.ValidationError('不是gy本人')
# return attrs
多字段驗證 對所有字段進行擴展驗證我們需要在序列化器中定義一個名字為(validate())的方法,來補充對所有字段進行擴展驗證的邏輯。
def validate(self, attrs):
'''
對多個字段進行驗證
:param attrs: 前段傳遞的字典數據
:return: 驗證成功:返回attrs;驗證失敗:返回錯誤信息
'''
username = attrs['username']
age=attrs['age']
home=attrs['home']
print(username)
if username != 'gy' or age!=18 or home!='河南':
# 失敗
raise serializers.ValidationError('不是gy本人')
# 成功
return attrs
class UserV(APIView):
def get(self,request):
users=User.objects.all()
ser=UserSer(users,many=True) #many=True 序列化多條數據
data=ser.data
return Response(data)
def post(self,request):
data=request.data
ser=UserSer(data=data)
ser.is_valid()
# 打印的是sers.py里的 raise serializers.ValidationError('不是gy本人')
print(ser.errors)
ser.save()
return Response({'code':200})
def put(self,request):
data=request.data
id=request.data.get('id')
print(data)
print(id)
user=User.objects.get(id=1)
print(user)
ser=UserSer(user,data=data)
ser.is_valid()
ser.save()
return Response({'code':200})
智能推薦
Django基礎
web框架的本質 所有的Web應用本質上就是一個socket服務端,而用戶的瀏覽器就是一個socket客戶端,基于請求做出響應,客戶都先請求,服務端做出對應的響應,按照http協議的請求協議發送請求,服務端按照http協議的響應協議來響應請求 socket模擬簡單框架 Django下載、安裝、配置: 下載 可以自己指定安裝的版本號 創建項目: 創建應用: 啟動項目: 配置settings 應用配置...
Django基礎
我自己的Django版本是2.1,pyhton是3.7,數據庫是mysql5.6 搭建一個Django web框架,知道Django中models,views,urls的作用基本就差不多完成了。先大致說一下Django的運行流程。當我們運行Django是,在沒有錯誤的情況下,我們在瀏覽器中輸入 http://127.0.0.1:8000/就可以訪問到我們的網頁了。在輸入網站訪問的時候,Django...
Django基礎
Django基礎 一:安裝django 二:路由層 2.1 path與re_path函數 2.2 url的反向解析 三:視圖層 3.1 HttpRequest對象屬性 3.2 HttpResponse對象 四:模板層 4.1 模板變量 4.2 模板語法之過濾器 4.3 模板標簽 4.4 靜態文件的載入 4.5 自定義過濾器 4.6 verbatim標簽 五:AJAX請求 六:狀態保持 6.1 co...
Django基礎
一、HTTP協議(應用層協議) 2、HTTP 協議概述 3、HTTP 工作原理 4、URL :統一資源定位符,用來確定互聯網中的唯一資源。 5、HTTP請求格式 6、HTTP相應格式...
Django 基礎
Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其他WEB框架其優勢為:大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。 一、基本配置 1、創建django項目 2、創建django應用 3、啟動django程序 4、創建超級管理員 5、和數據庫相關的命令 二、程序目錄 三、配置文件 1、數據庫 備注: (1)在...
猜你喜歡
Django基礎
一、常用命令 二、配置文件 配置 讀取配置文件 django中讀取settings文件源碼 補充:根據字符串的形式,自動導入模塊并使用反射找到模塊中的類,執行指定的方法 run.py django入口 三、urls:路由分發 例子 django2.0版的path 使用尖括號(<>)從url中捕獲值。 捕獲值中可以包含一個轉化器類型(converter type),比如使用 捕...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...