2017-08-08 6 views
2

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()); 
    } 

} 

enter image description here

enter image description here

+1

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. –

+0

Édité, plz passer en revue la question –

Répondre

2

Solved grâce

@view_config (route_name='gm', renderer='json',request_method="OPTIONS") 
    def options(context, request): 
     request.response.headers.update({ 
      'Access-Control-Allow-Origin': '*', 
      'Access-Control-Allow-Methods': 'POST,GET,DELETE,PUT,OPTIONS', 
      'Access-Control-Allow-Headers': 'Origin, Content-Type, Accept, Authorization', 
      'Access-Control-Allow-Credentials': 'true', 
      'Access-Control-Max-Age': '1728000', 
     }) 
     return dict() 
+1

Aussi il y a https://gist.github.com/mmerickel/1afaf64154b335b596e4 comme modèle réutilisable que vous pouvez inclure dans votre application si vous préférez. –