成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Django前后端分離實踐

Mike617 / 2834人閱讀

摘要:更新嘗試了一下實現(xiàn)前后端分離,新的文章如下前后端分離之初試更新可另外用實現(xiàn)前后端分離,這篇文章可能局限性太大,只是個人的入門實踐剛剛學習前端快一年,后臺方面了解甚少,于是決定踩踩坑,學習一下。

2018.9.6更新:嘗試了一下REST framework實現(xiàn)前后端分離,新的文章如下Django前后端分離之REST framework初試

2018.8.27更新:可另外用 restful API 實現(xiàn)前后端分離,這篇文章可能局限性太大,只是個人的入門實踐

剛剛學習前端快一年,后臺方面了解甚少,于是決定踩踩坑,學習一下。于是就選了django這個框架(剛剛好順便學了python)
不想使用框架的提供的模板功能,于是看看前后端分離 + MySQL數(shù)據(jù)庫如何實現(xiàn)
之間也踩了很多坑,從MySQL配置的版本問題,到本地測試的跨域問題等等
啊,廢話少說,看目錄

目錄:

一、創(chuàng)建項目
二、配置MySQL
三、創(chuàng)建應用
四、結語

過程比較詳細記錄了前后端分離的每一步,算是小白實踐吧哈哈

一、創(chuàng)建項目

到想要創(chuàng)建項目的文件夾下運行命令

$ django-admin startproject dj_experiment    //后面就是項目名字咯

創(chuàng)建完后生成目錄,具體什么意思請看官網(wǎng)文檔(https://docs.djangoproject.co...)

dj_experiment/
    manage.py
    dj_experiment/
        __init__.py
        settings.py
        urls.py
        wsgi.py
二、配置MySQL

這里我們默認安裝好MySQL了,并且為這個小實驗創(chuàng)建一個數(shù)據(jù)庫叫做"dj_experiment_db"
Django的配置文件中將SQLite作為默認數(shù)據(jù)庫。同時Django支持sqlite3,MySQL等數(shù)據(jù)庫,在settings.py中修改配置就好,而且因為有豐富的API,所以如果改動數(shù)據(jù)庫,也不需要修改models.py中的代碼
以下分為幾個步驟:

1.安裝pymysql數(shù)據(jù)庫驅動:
pip install pymysql

python3不支持MySQLdb,所以用pymysql代替

2.配置Django中的DATABASE

在settings.py中找到DATABASE

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",    #數(shù)據(jù)庫引擎
        "NAME": "dj_experiment_db",  #數(shù)據(jù)庫名
        "USER": "root",   #賬戶名
        "PASSWORD": "password", #密碼
        "HOST": "localhost", #主機
        "PORT": "3306", #端口
    }

}

接著在_init_.py添加如下代碼

import pymysql
pymysql.install_as_MySQLdb()

然后設置TIME_ZONE為自己的時區(qū)

TIME_ZONE = "Asia/Shanghai"

最后執(zhí)行數(shù)據(jù)庫遷移命令

python manage.py makemigrations
python manage.py migrate

然后我們登錄數(shù)據(jù)庫,連接數(shù)據(jù)庫dj_experiment_db,輸入show tables;就可以看到django創(chuàng)建的框架應用的表了

三、創(chuàng)建應用,編寫views

到dj_experiment目錄下運行命令,這里我們創(chuàng)建一個注冊的應用,然后在頁面里面循環(huán)漸進實現(xiàn)做以下前后端分離,開發(fā)后臺接口的兩個小實驗:
1.ajax與get的后端接口
2.ajax與post提交
兩個簡單的小實驗,但過程中有些問題:本地測試的跨域問題CSRF問題。
我們在實踐過程中再逐一解決

1.ajax與get的后臺接口

現(xiàn)在先創(chuàng)建應用register(先在這個應用實現(xiàn)get,再實現(xiàn)post):

$ python manage.py startapp register

創(chuàng)建完后目錄如下:

register/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

在views.py下創(chuàng)建接口,我們先舉個簡單的例子——hello接口
代碼如下

from django.shortcuts import render
from django.http import JsonResponse

def hello(request):
    return JsonResponse({"result": 200, "msg": "連接成功"})

然后將一個URL映射給此接口
register目錄中新建一個urls.py文件,輸入以下代碼

from django.urls import path
from . import views
urlpatterns = {
    path("helloApi", views.hello, name="hello")#第一個參數(shù)表示路徑
}

接著在dj_experiment/urls.py中指定我們創(chuàng)建的register.urls模塊

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path("register/", include("register.urls")),
    path("admin/", admin.site.urls),
]

最后打開django的開發(fā)服務器,測試一下接口

$ python manage.py runserver

瀏覽器訪問:http://localhost:8000/register/helloApi
可以看到如下顯示

因為沒有進行utf-8編碼,所以顯示的是Unicode編碼
這里推薦用火狐瀏覽器進行接口測試,看起來更加詳細

ok,接口開發(fā)完畢了,我們怎么進行前后端分離呢
在根目錄創(chuàng)建一個html文件夾,并在里面創(chuàng)建register.html,,如圖

我們先進行get后臺接口的訪問
先編寫一個ajax的封裝函數(shù)
ajaxResponse(xhr, 連接成功時執(zhí)行的函數(shù),連接失敗時執(zhí)行的函數(shù))
便于我們調(diào)用,代碼如下

    function ajaxResponse(xhr,successFunction,falseFunction) {
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            console.log(xhr.status);
            if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
                alert("成功");
                successFunction();
            } else {
                alert("失敗" + xhr.status);
                falseFunction();
            }
        }
    }
}

接下來編輯register.html如下:

然后我們來解決本地測試時的跨域問題
在register/views.py中編寫一個返回html的接口,代碼如下,注意import了render_to_response方法

from django.shortcuts import render, render_to_response
from django.http import JsonResponse

# Create your views here.
def registerPage(request):
    return render_to_response("register.html")

接著同理在register/urls.py中加入接口路徑,最后是這樣子的代碼

from django.urls import path
from . import views
urlpatterns = {
    path("helloApi", views.hello, name="hello"),
    path("registerPage", views.registerPage, name="registerPage")
}

最后瀏覽器訪問http://localhost:8000/register/registerPage
并且點擊方塊,接受msg成功 (疑問:放在服務器端的話是否需要這樣?)

2.ajax與post的后臺接口—注冊用戶

現(xiàn)在我們將創(chuàng)建真正的應用,與MySQL進行交互
django通過模型與數(shù)據(jù)庫進行交互

第一步:定義模型

我們叫這個模型為UserInfo,字段有username和password,所以代碼如下(__str__方法是為了方便命令行顯示與管理頁面顯示)

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    username = models.CharField(max_length=16)
    password = models.CharField(max_length=20)
    def __str__(self):
        return self.username
第二步:激活模型

創(chuàng)建模型后,django可以為應用創(chuàng)建數(shù)據(jù)庫schema和與username,password對象進行交互的python數(shù)據(jù)庫API?,F(xiàn)在我們要做的是激活模型

首先在settings.py的INSTALLED_APPS中添加設置

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "register.apps.RegisterConfig",#這里
]

接著運行命令,檢測模型文件的修改,并把修改的部分儲存為一次遷移(注意這里還沒有修改)

$ python manage.py makemigrations register

然后可以運行命令看看等會的遷移命令會執(zhí)行哪些SQL語句(這一步可干可不干)

$ python manage.py sqlmigrate register 0001


最后就執(zhí)行遷移命令

$ python manage.py migrate

顯示如下(WARNINGS是對MySQL Strict Mode 的提示):

之后可以在MySQL下看見django創(chuàng)建的表

(這里可以用命令行嘗試django提供的api或者配置并打開管理員頁面,可以去官網(wǎng)看看怎么做https://docs.djangoproject.co...)

第三步編寫view注冊視圖:

django自帶CSRF防護機制,所以我們這里加個@csrf_exempt屏蔽裝飾器

#新的引入文件
from django.views.decorators.csrf import csrf_exempt
import json
from .models import UserInfo

@csrf_exempt #屏蔽裝飾器器
def registerApi(request):
    if request.method == "POST":
        req = json.loads(request.body) #取得數(shù)據(jù)
        userID = req["userID"]
        pwd = req["pwd"]
        searchArray = UserInfo.objects.get_or_create(username=userID) #嘗試創(chuàng)建用戶
        print(searchArray)
        if searchArray[1] == True:
            return JsonResponse({"result": 200, "msg":"注冊成功"})
        else:
            return JsonResponse({"result": 200, "msg":"已有重復用戶名"})

同樣urls中記得改配置:

urlpatterns = [
    path("helloApi", views.hello, name="hello"),
    path("registerPage", views.registerPage, name="registerPage"),
    path("registerApi", views.registerApi, name="registerApi")
]

接著編寫html頁面

賬號:

密碼:

還有js

    let subBt = document.getElementById("submit");
    subBt.onclick = function () {
        let userID = document.getElementById("userID").value;
        let pwd = document.getElementById("pwd").value;
        let xhrRegister = new XMLHttpRequest();
        ajaxResponse(xhrRegister,
        function () {
            let respones = JSON.parse(xhrRegister.responseText);
            alert(respones.msg);
        },function () {
            });
        let user = {
            userID:userID,
            pwd:pwd
        };
        xhrRegister.open("post", "http://127.0.0.1:8000/register/registerApi");
        xhrRegister.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
        xhrRegister.send(JSON.stringify(user));
};

注冊成功

還有注冊失敗

四、結語

簡單的實踐目前就到此為止啦,做這次實踐的主要目的是了解后臺的框架,之中還有很多沒有去學習,比如如何在服務器上部署Django,Token驗證,數(shù)據(jù)庫操作等等
有什么問題或者哪里不對大家提出來討論下吧

參考資料:
MySQL驅動:https://blog.csdn.net/liuweiy...
django數(shù)據(jù)庫:https://code.ziqiangxuetang.c...
配置MySQL:https://www.cnblogs.com/wcwni...
屏蔽裝飾器:https://blog.csdn.net/lw_zhao...
django加載靜態(tài)網(wǎng)頁:https://blog.csdn.net/github_...

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/42257.html

相關文章

  • 細說 Django—web 前后分離

    摘要:理解這個統(tǒng)一標準的不符規(guī)范的資源沒有統(tǒng)一實踐一個例子圖書管理系統(tǒng)技術棧前端后端要點驗證前端路由統(tǒng)一的請求響應攔截處理權限控制表級對象級如下圖最后,是否要做前后端分離的開發(fā)模式,取決于實際情況的多方位考量,適合的才是更好的。 所謂的前后端分離 淵源 前端發(fā)展史 特點 前端:負責 View 和 Controller 層 后端:只負責 Model 層,業(yè)務處理/數(shù)據(jù)等 優(yōu)缺點 優(yōu)點:解...

    adam1q84 評論0 收藏0
  • Django前后分離之REST framework初試

    摘要:之前剛學時硬生生使用了靜態(tài)資源和接口分離的方法,實際使用中肯定會非常不方便。于是發(fā)現(xiàn)了用于前后端分離,編寫后臺的框架。 之前剛學django時硬生生使用了靜態(tài)資源和接口分離的方法,實際使用中肯定會非常不方便。于是發(fā)現(xiàn)了用于前后端分離,編寫后臺API的REST framework框架。這里做初步嘗試官方文檔看起來非常入門本次實踐主要是根據(jù)官方文檔步驟進行初步實踐,其中加入一些自己學習時理...

    Scorpion 評論0 收藏0
  • Django 基礎之(九)drf介紹.md

    摘要:為什么要進行前后端分離多端適配開發(fā)模式的流行前后端職責不清前后端開發(fā)效率問題,前后端相互等待前段一直配合后端,能力受到限制后端開發(fā)語言和模板高度耦合,導致開發(fā)語言依賴嚴重前后端分離的缺點前后端學習門檻增加數(shù)據(jù)依賴,導致文檔的重要性增加前段工 DRF 為什么要進行前后端分離 PC,APP,PAD多端適配 SPA開發(fā)模式的流行 前后端職責不清 前后端開發(fā)效率問題,前后端相互等待 前段一直...

    ?。?。 評論0 收藏0
  • Django項目前工程化的探索

    摘要:項目前端工程化的探索不通過層實現(xiàn)非網(wǎng)頁開發(fā)的前后端分離。做過這樣項目的各位攻城獅應該都知道有多痛苦吧。仔細想來,其實只是想要模板和靜態(tài)資源,我們可以直接在目錄下寫,當然也可以開一個前端工程來寫,最后把模板和靜態(tài)資源到工程的相應目錄下。 Django項目前端工程化的探索 不通過node層實現(xiàn)非SPA網(wǎng)頁開發(fā)的前后端分離。 技術棧:webpack + jade + es6 + scss +...

    jsummer 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<