python的前后端分离(一):django+原生js实现get请求

一、django新建项目和应用

参考:https://segmentfault.com/a/1190000016049962#articleHeader2

1、创建项目

django-admin startproject dj_e

  

2、数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',    #数据库引擎
        'NAME': 'dj_e_db',  #数据库名
        'USER': 'root',   #账户名
        'PASSWORD': 'password', #密码
        'HOST': 'localhost', #主机
        'PORT': '3306', #端口
    }

}

  

3、在_init_.py添加如下代码

import pymysql
pymysql.install_as_MySQLdb()

  


4、数据库迁移命令

python manage.py makemigrations
python manage.py migrate

  

5、创建应用,编写views
ajax与get的后台接口
创建应用register(在这个应用实现get):

python manage.py startapp register

  


6、在views.py下创建接口,我们先举个简单的例子——hello接口

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


# Create your views here.
def hello(request):
    return JsonResponse({'result': 200, 'msg': '连接成功'})

  

7、register目录中新建一个urls.py文件,输入以下代码

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

urlpatterns = [
    url(r'^helloApi$', views.hello, name='hello'),
    url(r'^registerPage$', views.registerPage, name='registerPage'),
]

  


8、在dj_e/urls.py中修改

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

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

  

9、最后打开django的开发服务器,测试一下接口

python manage.py runserver

 

二、原生js实现异步的get请求 

1、进行前后端的分离(ajax的get请求异步)
在根目录创建一个html文件夹,并在里面创建register.html

<script>
    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();
                }
            }
        }
    }
</script>
<div id="getHelloApiDiv" style="background: aqua;height: 100px;width: 100px"></div>
<script>
    getApiDiv = document.querySelector('#getHelloApiDiv');
    xhr = new XMLHttpRequest();
{#    getApiDiv.onclick = function () {#}
    window.onload = function () {
        ajaxResponse(
            xhr,
            function () {
                helloText = JSON.parse(xhr.responseText);
                getApiDiv.innerText = helloText.msg;
            }, function () {
            }
        );
        xhr.open('get', 'http://localhost:8000/register/helloApi'); //接口写在这里
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=utf-8;');
        xhr.send(null);
    };
</script>

  

2、在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 hello(request):
    return JsonResponse({'result': 200, 'msg': '连接成功'})


def registerPage(request):
    return render_to_response("register.html")

 

三、解决一些问题

1、django的相关配置

# 注册应用和允许跨域
INSTALLED_APPS = (
    ...
    'register',
    'corsheaders',
)

# 允许django跨域请求的配置
MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    ...
)
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

#  设置模板路径
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'html')],
		...

# 数据库配置
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
        'NAME': 'dj_e_db',  # 数据库名
        'USER': 'root',  # 账户名
        'PASSWORD': 'root',  # 密码
        'HOST': 'localhost',  # 主机
        'PORT': '3306',  # 端口
    }
}

# 语言和时区配置
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

  

2、跨域请求

参考:https://www.jianshu.com/p/24945ee1ec05

pip安装django-cors-headers,解决异步跨域被禁言的问题。

需要settings.py 进行配置。

 

四、效果截图

确定后,

 

posted @ 2019-03-28 00:01  安迪9468  阅读(1088)  评论(0编辑  收藏  举报