github django-cors-headershtml
pip install django-cors-headers
D:\Python27\Lib\site-packages\django\bin\app\app\settings.py前端
搜索 INSTALLED_APPS 添加 corsheaderspython
'corsheaders',mysql
'corsheaders.middleware.CorsMiddleware',git
'django.middleware.common.CommonMiddleware',github
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'corsheaders.middleware.CorsMiddleware', ]
PS: #註釋掉的是csrf 驗證sql
MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True數據庫
容許跨域的域名列表 如今表示全部均可以
CORS_ORIGIN_WHITELIST = (
'*'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)django
找到settings.py 搜索 django.middleware.csrf.CsrfViewMiddleware 前面加# PyCharm快捷鍵 ctrl + /json
這樣就關閉了全部的csrf驗證
參考路徑: D:\Python27\Lib\site-packages\django\bin\app\app\settings.py
1)導入HttpClient 和HttpErrorResponse
import {HttpClient, HttpErrorResponse} from '@angular/common/http'
2)提供http
constructor(private http: HttpClient) { }
3)完成模板提交函數onSubmit(value){}
①value就是模板裏表單的值 regForm.vaue
②而後進行json序列化 JSON.stringify(value)
const data =JSON.stringify(value);
③發送給後端 django 這裏就有跨域的問題 須要關閉django cors 和csrf 驗證
const data =JSON.stringify(value); 定義的json數據
let url = 'http://127.0.0.1:8000/formgetdata'; 發送的後臺接口地址
this.http.post(url,data,{
responseType:'json'
}).subscribe()
④接收後臺傳遞的json
只有JSON序列化的才能看到 JSON.stringify(data)
取得json的值的話 就是data.username
也就是說先看到JSON.stringify(data) 有什麼字段 才能用data.字段值獲取到
.subscribe(
data => {
console.log('請求成功!'+ data )
let datalist = JSON.stringify(data);
console.log(data.username)
console.log(data.password)
console.log(data.message)
}
)
使用this.http.post(url,data,option) 發送post請求
頂部導入
import {HttpClient, HttpErrorResponse} from '@angular/common/http'
constructor(private http: HttpClient) { }
onsubmit(value){ console.dir(value); console.dir(JSON.stringify(value)); const data =JSON.stringify(value); this.http.post('http://127.0.0.1:8000/formgetdata',data,{ responseType:'text' }).subscribe( data =>{ console.log('請求成功!') }, (err : HttpErrorResponse) => { if(err.error instanceof Error){ // 前端報錯 console.log("前端報錯-錯誤信息:",err.error.message) } else { //後端錯誤 console.log(`後端報錯-響應碼: ${err.status}, body was: ${err.error}`); } } ); }
總體結構
1)輸入input 雙向綁定 [(ngModel)]="名字" 名字就是name屬性值
2)表單值 收集提交 form 綁定ngSubmit
① 先定義表單名稱 #regForm ="ngForm"
② 收集表單信息 regForm.value
③ 傳遞給組件 (ngSubmit)="onsubmit(regForm.value)" 組件內定義onsubmit函數
準備工做 頂部導入
import json
from django.shortcuts import render
from django.http import HttpResponse
參考路徑:D:\Python27\Lib\site-packages\django\bin\app\app\urls.py
找到 urlpatterns 配置 url(r'^formgetdata',view.formgetdata)
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',view.hello), url(r'^formgetdata',view.formgetdata) ]
D:\Python27\Lib\site-packages\django\bin\app\app\view.py
這裏須要實現的就是兩個功能
查看數據是否接收到: request.body
接收表單數據:
datalist = request.body.decode('utf-8')
data = json.loads(datalist)
username = data['username']
password = data['password']
參考資料
https://stackoverflow.com/questions/29780060/trying-to-parse-request-body-from-post-in-django
res ={"username":username ,"password":password ,"message":"後臺成功接收表單信息!後臺請求成功"}
return HttpResponse(json.dumps(res),content_type="application/json")
上面兩點完整代碼截圖
實例代碼參考
# -*- coding: utf-8 -*- #from django.http import HttpResponse import json from django.shortcuts import render from django.http import HttpResponse import simplejson def hello(request): context = {} context['hello'] = 'Hello world! {{ hello }} 傳值' return render(request,'hello.html',context) def formgetdata(request): if request.method == 'POST': print request.body dataunicode = request.body.decode('utf-8') data = json.loads(dataunicode) username =data['username'] password =data['password'] print data print username res={'username':username,"password":password,"message":"後臺成功接收表單信息!後臺請求成功"} return HttpResponse(json.dumps(res),content_type="application/json") else: return HttpResponse('請求失敗')
提示
request.body 數據都在這裏能夠找到
接上面的內容,把前端接受到的數據寫入到數據庫裏
D:\Python27\Lib\site-packages\django\bin\app\app\urls.py
url(r'^formgetdata',view.formgetdata), url(r'^user', view.user),
好比
D:\Python27\Lib\site-packages\django\bin\app\app\urls.py
這裏爲了方便調用models.py文件建立的數據庫表,引入models模塊在頭部
這樣
import models
查詢表數據 就是這樣
data =models.Member.objects.values()
return HttpResponse(data)
這裏的Member就是建立的數據庫表
如下是models.py實例 建立表中的字段
python manage.py makemigrations
python manage.py migrate --database=mysql #mysql爲定義的數據庫
上面的數據庫定義 在settings.py 中 查找 DATABASES 而後想下面定義一組mysql數據庫
D:\Python27\Lib\site-packages\django\bin\app\app\settings.py
實例代碼參考 這裏default設置成mysql了,在使用中爲了不麻煩
DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # }, 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '192.168.1.103', 'POST': '3306', 'NAME': 'xxx', # 數據庫名稱 'USER': 'root', 'PASSWORD': '數據庫密碼', 'OPTIONS': { 'init_command': "SET sql_mode ='STRICT_TRANS_TABLES' " } }, 'mysql': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '192.168.1.103', 'POST': '3306', 'NAME': 'xxx', # 數據庫名稱 'USER': 'root', 'PASSWORD': '數據庫密碼', 'OPTIONS': { 'init_command': "SET sql_mode ='STRICT_TRANS_TABLES' " } } }