J'ai un sérieux problème avec la structure pyramidale. Je ajouter cette fonction à pyramideLa pyramide CORS ne sert pas PUT AND DELETE
add_cors_headers_response_callback(event):
def cors_headers(request, response):
response.headers.update({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST,GET,DELETE,PUT,OPTIONS',
# 'Access-Control-Allow-Methods': 'DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Origin, Content-Type, Accept, Authorization',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Max-Age': '1728000',
})
event.request.add_response_callback(cors_headers)
from pyramid.events import NewRequest
config.add_subscriber(add_cors_headers_response_callback, NewRequest)
Et je peux faire une demande à mon serveur en utilisant GET, POST méthodes. Le problème est que lorsque j'utilise les méthodes PUT et DELETE, le serveur envoie le statut HTTP 404, mais lorsque je boucle la route, j'obtiens la réponse (ou en utilisant POSTMAN).
J'utilise la même requête HTTP Angular avec Node.JS et accepte ma requête. Je ne sais pas pourquoi pyramide refusent de servir la vue
updatePatternModel(newPattern,url) {
let fullurl = this.baseUrl + url;
let data = {
"rule":newPattern
};
return this.http.put(fullurl,JSON.stringify(data))
.map(response => response.json())
.catch(err => this.handleErrorObservable(err));
}
PYRAMIDE
@view_config(request_method='PUT', route_name='gm')
def gm(self):
return dict()
ÉDITÉ
Je fais un exemple
from pyramid.view import view_config
@view_config(route_name='gm', renderer='json',request_method="GET")
def get(request):
return dict(hello="GET")
@view_config(route_name='gm', renderer='json',request_method="POST")
def post(request):
return dict(hello="POST")
@view_config(route_name='gm', renderer='json',request_method="PUT")
def put(request):
return dict(hello="PUT")
@view_config(route_name='gm', renderer='json',request_method="DELETE")
def delete(request):
return dict(hello="DELETE")
GET/POST fonctionne PUT mais , Supprimer ne le fait pas!
import { Injectable } from '@angular/core';
import {Http} from "@angular/http";
import "rxjs/add/operator/map"
@Injectable()
export class AppService {
baseUrl : string = "http://10.0.0.34:8880"
constructor(public http:Http) { }
getData(url) {
console.log('hi');
let full_url= this.baseUrl + url;
return this.http.get(full_url)
.map(response => response.json());
}
postData(url) {
console.log('hello');
let full_url= this.baseUrl + url;
return this.http.post(full_url,null)
.map(response => response.json());
}
putData(url) {
console.log('hello');
let full_url= this.baseUrl + url;
return this.http.put(full_url,null)
.map(response => response.json());
}
deleteData(url) {
console.log('hello');
let full_url= this.baseUrl + url;
return this.http.delete(full_url)
.map(response => response.json());
}
}
Votre problème ne semble pas lié à CORS, car l'application ne retournerait pas 404 dans ce cas. Le navigateur empêcherait simplement de faire la demande. Je chercherais ailleurs si j'étais toi. –
Édité, plz passer en revue la question –