日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

瀏覽:138日期:2022-07-28 14:47:05
一、說明

自己一是想跟上潮流二是習慣于直接干三是沒有人可以請教,由于這三點經(jīng)常搞得要死要活。之前只簡單看過沒寫過Diango,沒看過Django REST framework,今天一步到位直接上又撞上了南墻。在此記一下以備忘,也希望對后來者能有所幫助。本文相當于Django REST framework官方文檔的重新實現(xiàn)。

1.1 Django是什么

Django是當下流行的一個python語言的web框架,類似于java的struts2,(如果struts2太舊不懂那也可以理解為spring boot)。

1.2 Django REST framework是什么

Django類似于struts2,也就是說其是mvc模式的,也就是說其v是前后端強耦合的,但現(xiàn)在都講REST。

Django REST framework就是Django的REST化庫,用于實現(xiàn)Django的REST化。

二、開發(fā)環(huán)境搭建2.1 安裝PyCharm+conda

參見:https://www.jb51.net/article/205782.htm

2.2 在pycharm中新建項目

 Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

2.3 安裝Django和Django REST framework

依次點開pycharm----菜單----file----settings----project----project interpreter,安裝django、djangorestframework、pygments、pytest四個包

djangorestframework在conda-forge源中,如果找不到djangorestframework那應(yīng)該是沒添加conda-forge源的原因(中科大:https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/)

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

或者通過系統(tǒng)菜單開啟“Anaconda Prompt”用pip安裝,命令如下

conda activate DjangoTestpip install djangopip install djangorestframeworkpip install pygmentspip install pytest2.4 創(chuàng)建真正的Django項目

在前面中我們已經(jīng)創(chuàng)建了名稱為DjangoTest的項目,但要注意只是我們把名字命名為DjangoTest而已改項目到現(xiàn)在為止其實與Django無關(guān)。

Django項目需要通過django-admin命令來創(chuàng)建;所以我們要到項目所在文件夾下將現(xiàn)有DjangoTest文件夾刪掉,然后用django-admin命令來重新創(chuàng)建DjangoTest。

(前邊創(chuàng)建的DjangoTest的意義,是更多是為了創(chuàng)建DjangoTest虛擬環(huán)境。雖然有點繞,但這是我針對Scrapy和Django這種雞和蛋問題能想到的最好辦法)

而django-admin命令的位置,我們可以借助conda env list來查看DjangoTest虛擬環(huán)境所在的目錄,然后加上Scriptsdjango-admin.exe即是其位置。比如我的操作如下:

cd F:PycharmProjectsF:rmdir /s /q DjangoTestconda env listD:LanguageMiniconda3envsDjangoTestScriptsdjango-admin.exe startproject DjangoTest

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

創(chuàng)建完成后目錄結(jié)構(gòu)如下:

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

 2.5 設(shè)置運行環(huán)境

django項目需要通過python manage.py runserver形式運行,我們也需要配置成該形式。

依次點擊菜單----Run----Edit Configurations----左上角+號----Python,添加運行環(huán)境

Name----環(huán)境名稱,自己隨便填

Script path----manage.py所在的路徑,改成自己的

Parameters----runserver,ip和端口如果需要直接追加在后邊即可

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

一定要注意,后續(xù)不要隨便在一個頁面就右鍵run/debug,而是不管修改什么文件在什么位置都要run/debug上邊這個環(huán)境,不然運行不起來。(一直報錯django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.)

2.6 將Django REST framework集成到Django

上邊我們創(chuàng)建了Django項目,至于Django REST framework只是安裝并沒有開始操作,下邊我們開始使用Django REST framework對上邊的Django項目進行REST化改造。

一般而言我們不直接大幅修改Django項目的文件,而是新建一個APP實現(xiàn)REST,然后原來的Django項目文件只寫一些包含命令即可。所謂APP可以理解為子文件夾或者一個新線程。

為了更好地證明我們的程序是能很好運行的,我這里會改用和官方例子不一樣的名稱包括app名稱model名稱等;并盡可能說明每個操作本質(zhì)是在做什么。 

2.6.1 注冊drest和Django REST framework

首先,進入到manage.py所在目錄新建一個app(注意打開的cmd中的python和pycharm中的python同為python3不然運行就報錯了,我這里直接在前邊的Anaconda Prompt中運行):

python manage.py startapp drest

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

向Django項目注冊drest,由于Django REST framework其實也以app形式注入所以也一同注冊。編緝DjangoTest/settings.py找到INSTALLED_APPS追加以下內(nèi)容:

’rest_framework’,’drest.apps.DrestConfig’,

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

 2.6.2 路由關(guān)聯(lián)調(diào)整等

在drest目錄下新建urls.py(內(nèi)容先不寫),然后在DjangoTest/usrls.py中包含它;即DjangoTest/usrls.py修改如下:

from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import url, includeurlpatterns = [ path(’admin/’, admin.site.urls), url(r’^’, include(’drest.urls’)),]

另外我們再在drest創(chuàng)建一個序列化文件serializers.py(內(nèi)容先不寫)用于后續(xù)序列化。到此我們的環(huán)境算搭建好了,項目目錄結(jié)構(gòu)如下:

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

三、開發(fā)示例

前邊我們已搭好了環(huán)境,創(chuàng)建了一個app----drest,這里我們即在drest上進行開發(fā)。

3.1 創(chuàng)建model

這里的model不是mvc中的m,而是orm中的表對應(yīng)的類,稍后數(shù)據(jù)庫的表就是根據(jù)這個類來建立的。

編緝drest/model.py,寫入以下內(nèi)容:

from django.db import models# Create your models here.class Test(models.Model): # 這些在創(chuàng)建數(shù)據(jù)表時是表字段,括號內(nèi)為字段對應(yīng)屬性 # 不過注意default屬性,是說在實例化這個類時該字段默認是這個值,創(chuàng)建數(shù)據(jù)表時并不會當作一行括入數(shù)據(jù)表 created = models.DateTimeField(auto_now_add=True) username = models.CharField(max_length=100, default=’ls’, ) password = models.CharField(max_length=100, default=’toor’, ) class Meta: # 這個表示數(shù)據(jù)表的內(nèi)容按創(chuàng)建時間排序 ordering = (’created’,)3.2 創(chuàng)建model對應(yīng)序例化類

編寫drest/serializers.py寫入以下內(nèi)容:

from rest_framework import serializersfrom drest.models import Testclass TestSerializer(serializers.ModelSerializer): class Meta: # 此處指明本序列化對應(yīng)的model model = Test # 此處指明從model對應(yīng)數(shù)據(jù)表中讀出哪些字段 # id字段我們在model中并沒指明應(yīng)該是框架自己創(chuàng)建的 # 另外我們還創(chuàng)建了created字段,但這里我們不加讀取他,當然你要讀取加上即可 fields = (’id’, ’username’, ’password’)3.3 設(shè)定路由

編緝drest/urls.py,寫入以下內(nèi)容:

from django.conf.urls import urlfrom drest import viewsurlpatterns = [ url(r’^test/$’, views.test),]3.4 創(chuàng)建視圖

在REST中視圖已經(jīng)不是mvc中的html與后端代碼混淆的那種.jsp或.aspx頁面了,所指的是生成并返回json/xml結(jié)果的東西(反而更像mvc中的m)。

在路由中我們設(shè)定鏈接test,指向test視圖;我們這里來實現(xiàn)test視圖,該視圖使用3.2中的序列化類讀取3.1中對應(yīng)的數(shù)據(jù)表的所有內(nèi)容實現(xiàn)序列化并返回。

from django.http import JsonResponsefrom rest_framework.parsers import JSONParserfrom drest.serializers import Testfrom drest.serializers import TestSerializerdef test(request): ''' List all code snippets, or create a new snippet. ''' if request.method == ’GET’:# 這里應(yīng)該是model對應(yīng)的所有字段 test_obj = Test.objects.all() # 序列化 serializer = TestSerializer(test_obj, many=True) # 返回 return JsonResponse(serializer.data, safe=False) # 此框架想實現(xiàn)原始REST的思想,如果是post就保存到數(shù)據(jù)庫,這里暫且保留雖然我覺得不實用 elif request.method == ’POST’: data = JSONParser().parse(request) serializer = TestSerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=201) return JsonResponse(serializer.errors, status=400)

在沒有if代碼對get/post等方法都進行同樣的響應(yīng),如果要區(qū)分那就在在如if request.method == ’POST’:分支內(nèi)編寫響應(yīng)代碼即可。為方便post測試附上requests和curl post提交的形式。

requests post提交json:

import requestsurl = 'http://127.0.0.1:8000/test1/'data = {'username':'ls', 'password':'toor'}requests.post(url,json=data)

curl post提交json:

curl -H 'Content-Type:application/json' -X POST --data ’{'username': 'ls','password':'toor'}’ http://127.0.0.1:8000/test1/

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

3.5 創(chuàng)建model對應(yīng)數(shù)據(jù)表

我們在3.1中就建好了model,在官方文檔中都是建好model就建對應(yīng)數(shù)據(jù)表的,但是由于我對實現(xiàn)步驟做了調(diào)整如果在3.1中就建表,會因程序有錯誤而創(chuàng)建失敗,所以我們只能到這里才創(chuàng)建類據(jù)表。

指示在數(shù)據(jù)庫中創(chuàng)建model對應(yīng)的表,進入到manage.py目錄執(zhí)行以下命令:

python manage.py makemigrations drestpython manage.py migrate

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

執(zhí)行完成后在manage.py同級目錄下可以看到一個db.sqlite3文件,該文件是一個sqlite3數(shù)據(jù)庫。

使用SQLiteStudio等工具打開,可以看到有一個dres_test的表其字段“created”、“username”、“password”正是我們在model中配置好的。

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

3.6 向drest_test表插入數(shù)據(jù)

我們一直說TestSerializer的作用是讀取drest_test表的所有內(nèi)容并序列化,在上一步中我們創(chuàng)建好了drest_test;但是我們在model的注釋中也說過創(chuàng)建數(shù)據(jù)表時不會向表中插入數(shù)據(jù),也就是說此時drest_test表雖創(chuàng)建好了但其是一個空表是沒數(shù)據(jù)的,此時如果我們運行程序并訪問test鏈接那返回是空值。所以我們要向drest_test表中插入數(shù)據(jù)。

進入到manage.py目錄執(zhí)行以下命令啟動shell:

python manage.py shell

為了更好地說明model中default的作用我們插入兩條數(shù)據(jù):

from drest.models import Testfrom drest.serializers import TestSerializerfrom rest_framework.renderers import JSONRendererfrom rest_framework.parsers import JSONParsertest = Test()test.save()test = Test(username=’root’)test.save()

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

此時查看drest_test表的內(nèi)容,如下所示正是我們插入的兩條數(shù)據(jù):

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

3.7 啟動程序并訪問

我們前面說過運行django項目run的一定要是我們2.5中設(shè)置的運行環(huán)境,現(xiàn)在雖加項目進行了如些復(fù)雜的操作但項目還是django項目還是要運行那個環(huán)境(名為django)。

pycharm切換到manage.py----在其上右鍵----選擇Run ‘django’,程序成功運行如下:

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

 我們看到監(jiān)聽地址為http://127.0.0.1:8000/,而我們設(shè)置的路由是test

打開瀏覽器訪問http://127.0.0.1:8000/test,結(jié)果如下圖,返回結(jié)果與預(yù)期完全一致: 

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

四、更直接的restful方法

上一大節(jié)的示例依據(jù)官方示例整理而成,整個流程雖然還算清楚,但給人一種復(fù)雜感。

比如為什么一定要我創(chuàng)建model、為什么一定要我創(chuàng)建model序列化類、為什么一定要創(chuàng)建數(shù)據(jù)表、為什么一定要向數(shù)據(jù)表中插入數(shù)據(jù)----總而言之,為什么一定要涉及數(shù)據(jù)庫?

并非所有請求都要涉及數(shù)據(jù)庫的,或者我就只想一個請求過來然后直接簡單地返回隨便一個數(shù),那該如何寫呢。以test1請求為例。

4.1 設(shè)定路由

編緝drest/urls.py,寫入以下內(nèi)容:

from django.conf.urls import urlfrom drest import viewsurlpatterns = [ url(r’^test1/$’, views.test1),]4.2 創(chuàng)建視圖

編緝drest/views.py追加test1方法:

def test1(request): # 要獲取客戶端提交的參數(shù),可通過request.GET['param_name']或request.POST['param_name']獲取,param_name是要獲取的參數(shù)名 # 但要另外注意對post提交django默認是有csrf token校驗的,要注意怎么處理好,最簡單的方法是到setting.py中將’django.middleware.csrf.CsrfViewMiddleware’項注釋掉 # username = request.GET['username'] # username = request.POST['username'] # 如果前端通過json格式提交,那么需要使用以下方式獲取參數(shù) # data = JSONParser().parse(request) # username = data['username'] # Django執(zhí)行sql語句,第一種方法是依賴model的model.objects.get()等方法 # 獲取第一條記錄 # Test.objects.get(username='ls') # 獲取記錄集合 # Test.objects.filter(username='ls') # Django執(zhí)行sql語句,第二種方法是直接執(zhí)行sql語句 # cursor = connection.cursor() # cursor.execute(’select * from drest_test’) # 獲取第一條記錄 # row = cursor.fetchone() # 遍歷數(shù)據(jù)表所有記錄 # for row in cursor.fetchall(): # print(f'{row}') dict1 = {} dict1['id'] = 1 dict1['result'] = 'success' # JsonResponse()最正規(guī)的就是給他傳一個字典 # 上一節(jié)傳的serializer.data是一個列表反而不那么正規(guī),傳非字典參數(shù)要設(shè)置safe=False return JsonResponse(dict1)4.3 啟動程序并訪問

和3.7一樣運行manage.py,然后訪問http://127.0.0.1:8000/test1/,結(jié)果如下圖。

Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程

五、使用總結(jié)

在第三大節(jié)上,網(wǎng)上現(xiàn)有的很多教和感覺就是自己把英文版翻譯成中文,但又不能很好地解框架到底在做什么,尤其是model其實是用來創(chuàng)建數(shù)據(jù)表和序列化類本質(zhì)是讀取數(shù)據(jù)表的內(nèi)容并返回這兩點,導(dǎo)致翻譯得似是而非反而讓人更難理解框架的本質(zhì)。

如第四大節(jié)所言,我們寫程序工作總不會都是讀取數(shù)據(jù)庫表然后返回。增刪改查尤其是跨數(shù)據(jù)表的增刪改查還是得在dao層中另行實現(xiàn),作為竄聯(lián)的邏輯代碼則在view上實現(xiàn);view調(diào)用dao,dao調(diào)用model。

更多關(guān)于 Django framework 相關(guān)教程請點擊下面的相關(guān)鏈接

標簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩三级精品| 图片区亚洲欧美小说区| 日韩精品一区二区三区av| 日韩av一区二| 久久精品国产999大香线蕉| 岛国av在线网站| 日韩精品dvd| aa国产精品| 欧美午夜网站| 日韩成人三级| 亚洲免费影视| 国产精品亚洲欧美日韩一区在线| 精品国产乱码久久久久久1区2匹| 欧洲一区二区三区精品| 99视频+国产日韩欧美| 日韩精品欧美成人高清一区二区| 国产精品久久久一区二区| 亚洲综合在线电影| 丝袜亚洲精品中文字幕一区| 国产日本久久| 久久视频一区| 亚洲一区有码| 久久精品天堂| 亚洲欧美日韩精品一区二区| 国产免费久久| 激情婷婷久久| 欧美欧美黄在线二区| 亚洲精品在线影院| 中文字幕亚洲精品乱码| 色一区二区三区四区| 六月婷婷一区| 高清日韩中文字幕| 一区二区国产在线| 亚洲欧洲美洲av| 日韩有码av| 亚洲福利国产| 国产亚洲精品美女久久| av一区在线| 国产探花在线精品| 一本色道精品久久一区二区三区| 麻豆国产欧美日韩综合精品二区| 亚洲一区久久| 亚洲综合电影| 国产香蕉精品| 蜜桃视频一区二区三区| 成人一区不卡| 国产日韩免费| 只有精品亚洲| 欧美亚洲国产激情| 九九九精品视频| 日本亚州欧洲精品不卡| 正在播放日韩精品| 青青草精品视频| 亚洲在线观看| 欧美中文一区二区| 国产一区国产二区国产三区| 日本午夜精品视频在线观看| 9色国产精品| 久久精品欧美一区| 成人亚洲精品| 久久xxx视频| 欧美综合社区国产| 蜜桃久久精品一区二区| 亚洲午夜电影| 日本不良网站在线观看| 久久不见久久见中文字幕免费 | 久久理论电影| 精品久久久网| 国产精品视频3p| 日本不卡视频在线| 久久亚洲国产精品一区二区| 好看的av在线不卡观看| 激情综合在线| 国产中文一区| 欧美综合另类| 亚洲午夜视频| 激情欧美国产欧美| 欧美日韩在线二区| 香蕉久久99| 欧美男人天堂| 在线天堂中文资源最新版| 国精品产品一区| 欧美精品成人| 国产日韩亚洲| 国产精品丝袜在线播放| 久久激情五月激情| 蜜桃视频第一区免费观看| 国产亚洲精品v| 久久午夜影视| 亚洲精一区二区三区| 日韩国产一区二区| 天堂va在线高清一区| 国产精品片aa在线观看| 国产精品一区二区三区av| 丝瓜av网站精品一区二区| 日韩一区精品视频| 男女精品网站| 日韩精品一二三区| 亚洲毛片在线免费| 午夜久久av | 中文字幕中文字幕精品| 蜜臀久久99精品久久久久宅男 | 一二三区精品| 四虎成人精品一区二区免费网站| 午夜电影一区| 日本欧美韩国一区三区| 国产精品久久久久久久久久齐齐| 国产乱码精品一区二区亚洲| 久久精品亚洲一区二区| 91视频精品| 欧美a级片一区| 视频一区在线播放| 亚洲精品影视| 久久av电影| 给我免费播放日韩视频| 日韩另类视频| 蜜桃视频一区二区| 国产日韩一区二区三区在线 | 久久亚洲国产精品尤物| www.51av欧美视频| 久久中文视频| 一区二区三区四区在线观看国产日韩| 亚洲精品观看| 久久精品资源| 日本高清不卡一区二区三区视频| 日韩午夜黄色| 日韩va欧美va亚洲va久久| 精品黄色一级片| 丝袜诱惑一区二区| 亚洲欧美日韩精品一区二区 | 国产精品13p| 老牛影视一区二区三区| 国产精品伊人| 欧美成人久久| 国产麻豆一区| 黄色在线一区| 麻豆精品在线观看| 黄色亚洲大片免费在线观看| 日韩一区免费| 四虎4545www国产精品 | 国产精品最新| 91成人网在线观看| 久久丁香四色| 国产偷自视频区视频一区二区| 国产剧情一区| 日韩视频二区| 欧美激情福利| 图片区亚洲欧美小说区| 国产精品videosex极品| 日韩视频一区| 国产一区二区三区亚洲| 蜜臀av性久久久久蜜臀aⅴ四虎| 91日韩欧美| 欧美精品三级在线| 欧美粗暴jizz性欧美20| 麻豆精品国产91久久久久久| 丝袜亚洲另类欧美| 日韩伦理福利| 国产探花在线精品| 免费精品视频| 视频小说一区二区| 欧美精品国产| 天堂av在线一区| 日韩精品首页| 久久97视频| 国产毛片一区二区三区| 在线国产精品一区| 国精品一区二区三区| 水蜜桃久久夜色精品一区| 日本免费在线视频不卡一不卡二| 在线看片不卡| 日韩精品久久久久久久电影99爱 | 国产日韩一区二区三区在线播放| 免费精品国产的网站免费观看| 欧美日韩精品一区二区三区视频 | 亚洲国产不卡| 亚洲不卡系列| 久久亚洲资源中文字| 中文字幕日本一区| 自由日本语亚洲人高潮| 日韩欧美精品一区| 精品亚洲a∨一区二区三区18| 欧美专区一区| 亚洲香蕉久久| 欧美亚洲激情| 狠狠久久伊人| 欧美激情综合| 国产精品一国产精品k频道56| 日本在线成人| 性色一区二区| 亚洲永久字幕| 在线综合欧美| 三级欧美韩日大片在线看| 激情五月色综合国产精品| 日韩精品专区| 日韩黄色大片网站| 激情亚洲影院在线观看| av一区在线| 欧美+亚洲+精品+三区| 中文字幕成在线观看|