欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Python3+PyCharm+Django+Django REST framework配置與簡單開發教程

Python3+PyCharm+Django+Django REST framework配置與簡單開發教程

熱門標簽:鎮江人工外呼系統供應商 騰訊地圖標注有什么版本 千呼ai電話機器人免費 申請辦個400電話號碼 400電話辦理費用收費 高德地圖標注字母 外呼系統前面有錄音播放嗎 深圳網絡外呼系統代理商 柳州正規電銷機器人收費

一、說明

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

1.1 Django是什么

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

1.2 Django REST framework是什么

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

Django REST framework就是Django的REST化庫,用于實現Django的REST化。

二、開發環境搭建

2.1 安裝PyCharm+conda

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

2.2 在pycharm中新建項目

 

2.3 安裝Django和Django REST framework

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

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

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

conda activate DjangoTest

pip install django
pip install djangorestframework
pip install pygments
pip install pytest

2.4 創建真正的Django項目

在前面中我們已經創建了名稱為DjangoTest的項目,但要注意只是我們把名字命名為DjangoTest而已改項目到現在為止其實與Django無關。

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

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

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

cd F:\PycharmProjects
F:
rmdir /s /q DjangoTest
conda env list
D:\Language\Miniconda3\envs\DjangoTest\Scripts\django-admin.exe startproject DjangoTest

創建完成后目錄結構如下:

 2.5 設置運行環境

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

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

Name----環境名稱,自己隨便填

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

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

一定要注意,后續不要隨便在一個頁面就右鍵run/debug,而是不管修改什么文件在什么位置都要run/debug上邊這個環境,不然運行不起來。(一直報錯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

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

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

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

2.6.1 注冊drest和Django REST framework

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

python manage.py startapp drest

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

'rest_framework',
'drest.apps.DrestConfig',

 2.6.2 路由關聯調整等

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

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include

urlpatterns = [
  path('admin/', admin.site.urls),
  url(r'^', include('drest.urls')),
]

另外我們再在drest創建一個序列化文件serializers.py(內容先不寫)用于后續序列化。到此我們的環境算搭建好了,項目目錄結構如下:

三、開發示例

前邊我們已搭好了環境,創建了一個app----drest,這里我們即在drest上進行開發。

3.1 創建model

這里的model不是mvc中的m,而是orm中的表對應的類,稍后數據庫的表就是根據這個類來建立的。

編緝drest/model.py,寫入以下內容:

from django.db import models

# Create your models here.
class Test(models.Model):
  # 這些在創建數據表時是表字段,括號內為字段對應屬性
  # 不過注意default屬性,是說在實例化這個類時該字段默認是這個值,創建數據表時并不會當作一行括入數據表
  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:
    # 這個表示數據表的內容按創建時間排序
    ordering = ('created',)

3.2 創建model對應序例化類

編寫drest/serializers.py寫入以下內容:

from rest_framework import serializers
from drest.models import Test

class TestSerializer(serializers.ModelSerializer):
  class Meta:
    # 此處指明本序列化對應的model
    model = Test
    # 此處指明從model對應數據表中讀出哪些字段
    # id字段我們在model中并沒指明應該是框架自己創建的
    # 另外我們還創建了created字段,但這里我們不加讀取他,當然你要讀取加上即可
    fields = ('id', 'username', 'password')

3.3 設定路由

編緝drest/urls.py,寫入以下內容:

from django.conf.urls import url
from drest import views

urlpatterns = [
  url(r'^test/$', views.test),
]

3.4 創建視圖

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

在路由中我們設定鏈接test,指向test視圖;我們這里來實現test視圖,該視圖使用3.2中的序列化類讀取3.1中對應的數據表的所有內容實現序列化并返回。

from django.http import JsonResponse
from rest_framework.parsers import JSONParser
from drest.serializers import Test
from drest.serializers import TestSerializer

def test(request):
  """
  List all code snippets, or create a new snippet.
  """
  if request.method == 'GET':# 這里應該是model對應的所有字段
    test_obj = Test.objects.all()
    # 序列化
    serializer = TestSerializer(test_obj, many=True)
    # 返回
    return JsonResponse(serializer.data, safe=False)

  # 此框架想實現原始REST的思想,如果是post就保存到數據庫,這里暫且保留雖然我覺得不實用
  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等方法都進行同樣的響應,如果要區分那就在在如if request.method == 'POST':分支內編寫響應代碼即可。為方便post測試附上requests和curl post提交的形式。

requests post提交json:

import requests

url = "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/

3.5 創建model對應數據表

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

指示在數據庫中創建model對應的表,進入到manage.py目錄執行以下命令:

python manage.py makemigrations drest
python manage.py migrate

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

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

3.6 向drest_test表插入數據

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

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

python manage.py shell

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

from drest.models import Test
from drest.serializers import TestSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser

test = Test()
test.save()
test = Test(username='root')
test.save()

此時查看drest_test表的內容,如下所示正是我們插入的兩條數據:

3.7 啟動程序并訪問

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

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

 我們看到監聽地址為http://127.0.0.1:8000/,而我們設置的路由是test

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

四、更直接的restful方法

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

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

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

4.1 設定路由

編緝drest/urls.py,寫入以下內容:

from django.conf.urls import url
from drest import views

urlpatterns = [
  url(r'^test1/$', views.test1),
]

4.2 創建視圖

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

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

4.3 啟動程序并訪問

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

五、使用總結

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

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

更多關于 Django framework 相關教程請點擊下面的相關鏈接

您可能感興趣的文章:
  • Django restframework 框架認證、權限、限流用法示例
  • DjangoRestFramework 使用 simpleJWT 登陸認證完整記錄
  • Django rest framework如何自定義用戶表
  • 深度解析Django REST Framework 批量操作
  • Django REST Framework 分頁(Pagination)詳解
  • Django restful framework生成API文檔過程詳解
  • 自定義Django_rest_framework_jwt登陸錯誤返回的解決
  • django rest framework使用django-filter用法
  • django restframework serializer 增加自定義字段操作
  • Django REST framework 限流功能的使用

標簽:海南 烏蘭察布 烏蘭察布 合肥 哈爾濱 大慶 平頂山 郴州

巨人網絡通訊聲明:本文標題《Python3+PyCharm+Django+Django REST framework配置與簡單開發教程》,本文關鍵詞  Python3+PyCharm+Django+Django,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python3+PyCharm+Django+Django REST framework配置與簡單開發教程》相關的同類信息!
  • 本頁收集關于Python3+PyCharm+Django+Django REST framework配置與簡單開發教程的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    在线观看免费小视频| 亚洲国产精品二十页| 亚洲午夜电影网| jvid福利写真一区二区三区| 国产精品视频在| 久久久噜噜噜久久人人看| 日韩1区2区3区| 朝桐光av一区二区三区| 欧美日韩激情一区| 亚洲一区二区三区四区五区黄| av电影在线观看完整版一区二区| www.xxxx日本| 中文字幕一区二区三区在线不卡 | 亚洲欧美一区二区久久| 成人午夜视频在线观看| 天天爽天天爽天天爽| 亚洲国产高清在线| 国产69精品一区二区亚洲孕妇| 午夜激情视频在线播放| 中文字幕av一区二区三区免费看| 国产福利一区二区三区视频| 我要看一级黄色录像| 亚洲欧洲成人av每日更新| 99综合电影在线视频| 日本精品裸体写真集在线观看| 亚洲三级在线观看| av在线免费观看不卡| 欧美三级欧美一级| 日韩主播视频在线| 亚洲av综合一区二区| 久久九九全国免费| 成人国产精品免费观看动漫| 在线观看天堂av| 国产日韩欧美精品电影三级在线| 亚洲黄网站在线观看| 在线播放国产视频| 3atv在线一区二区三区| 日韩激情av在线| 天天摸日日摸狠狠添| 国产精品久久久一本精品| 91蜜桃在线免费视频| 制服丝袜一区二区三区| 激情成人综合网| 成年人av电影| 香蕉成人啪国产精品视频综合网| 亚洲人人夜夜澡人人爽| 国产女人18毛片水真多成人如厕 | 午夜黄色福利视频| 亚洲欧美日韩久久| 超碰caoprom| 久久网这里都是精品| 国产成人av一区二区| 欧美三级中文字| 久久综合综合久久综合| 精品国产欧美日韩不卡在线观看| 亚洲午夜久久久久| jizz中文字幕| 一区二区三区欧美激情| 人妻精品久久久久中文字幕| 中文在线一区二区| 大桥未久恸哭の女教师| 国产视频亚洲色图| 麻豆传媒在线看| 欧美精品一区二区三区四区 | 亚洲最大的黄色网址| 亚洲国产一区二区视频| 人人艹在线视频| 亚洲一区av在线| avhd101老司机| 亚洲精品中文字幕乱码三区| 蜜桃精品一区二区| 亚洲人午夜精品天堂一二香蕉| 添女人荫蒂视频| 国产精品国产三级国产三级人妇| 国产69视频在线观看| 亚洲国产成人自拍| 欧产日产国产精品98| 亚洲欧洲另类国产综合| 国产真实乱人偷精品人妻| 一区二区三区资源| 182在线观看视频| 日韩av一级电影| 日本乱人伦aⅴ精品| 经典三级一区二区| 欧美日韩五月天| 成人丝袜18视频在线观看| 欧美成人艳星乳罩| 亚洲成人精品在线播放| 中文字幕av一区二区三区高| 日本三级日本三级日本三级极| 国产无一区二区| 国产一级二级在线观看| 亚洲一区二区三区在线| 一本色道久久综合狠狠躁的推荐| 麻豆精品国产91久久久久久| 欧美日韩激情一区二区三区| 成人免费看视频| 久久亚区不卡日本| 国产又粗又猛又色| 亚洲精品国产无套在线观| 成人18视频免费69| 奇米精品一区二区三区在线观看| 欧美三级一区二区| 不卡的av在线播放| 欧美国产视频在线| 免费黄色片网站| 日韩电影在线一区二区三区| 欧美三级视频在线| 91在线观看美女| 中文字幕亚洲在| 91精品一区二区三区蜜桃| 狠狠色狠狠色综合| 精品理论电影在线| 人人妻人人澡人人爽人人精品| 亚洲国产裸拍裸体视频在线观看乱了 | 天堂va蜜桃一区二区三区 | 色综合中文综合网| 欧洲av在线精品| 成人免费三级在线| 国产精品第四页| 亚洲区一区二区三| 狠狠色2019综合网| www激情久久| 国产特级黄色录像| 日韩av在线播放中文字幕| 在线不卡免费欧美| 日本精品一二三| 亚洲一区二区av在线| 欧美日韩精品三区| 免费黄色av网址| 亚洲国产一区在线观看| 欧美日韩国产精品自在自线| 亚洲av无一区二区三区久久| 亚洲精品精品亚洲| 欧美日韩在线免费视频| 国产人妻精品午夜福利免费| 亚洲黄色av一区| 日本精品视频一区二区三区| 一卡二卡三卡四卡五卡| 亚洲一区二区影院| 欧美日韩不卡在线| 一级黄色片毛片| 日韩国产欧美一区二区三区| 日韩欧美在线123| 90岁老太婆乱淫| 黄页视频在线91| 欧美韩日一区二区三区四区| 色综合久久久久综合体桃花网| 99视频热这里只有精品免费| 亚洲精品视频一区二区| 欧美日韩一区二区三区四区五区 | 91精品国产综合久久久久久久| 亚洲午夜久久久久久久久| 日本不卡1234视频| 久久综合色综合88| 国产色无码精品视频国产| av不卡免费电影| 亚洲国产毛片aaaaa无费看| 日韩一级黄色大片| 黄色av免费播放| 成人av网址在线| 亚洲国产一区二区a毛片| 日韩免费电影网站| 国产又粗又长又黄的视频| 暴力调教一区二区三区| 亚洲激情图片小说视频| 正在播放亚洲一区| 国产亚洲精品精品精品| 99精品热视频| 日韩不卡在线观看日韩不卡视频| 久久久99免费| 在线观看91视频| aaaaa一级片| 国产成人精品免费视频网站| 一区二区免费在线播放| 精品少妇一区二区三区视频免付费| 欧美性猛交xxxx乱大交少妇| 91丝袜美女网| 麻豆高清免费国产一区| 综合激情网...| 欧美一区二区三区免费| 日韩亚洲欧美中文字幕| 日韩成人av影院| 国内成人精品2018免费看| 亚洲蜜臀av乱码久久精品蜜桃| 日韩一级片在线观看| 国产成人自拍网站| 日本一级片在线播放| 粉嫩一区二区三区性色av| 亚洲成人午夜影院| 日本一区二区三区四区在线视频| 欧美三级三级三级| 国产精品综合激情| 五月天丁香社区| 国产69精品久久久久毛片 | 国产精品一区二区入口九绯色| 国产91在线观看| 日av在线不卡| 亚洲欧美激情一区二区| 久久免费美女视频|