author | Tero Marttila <terom@paivola.fi> |
Fri, 30 Jan 2015 16:06:55 +0200 | |
changeset 112 | b5e0939124b1 |
parent 111 | 530d215d5df1 |
permissions | -rw-r--r-- |
108 | 1 |
import json |
2 |
||
3 |
class JSONMixin: |
|
4 |
MIMETYPE = 'application/json' |
|
5 |
||
110
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
6 |
CORS_ORIGIN = None |
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
7 |
CORS_METHODS = None |
111
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
8 |
CORS_HEADERS = None |
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
9 |
CORS_CREDENTIALS = None |
110
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
10 |
|
112
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
11 |
def request_post(self): |
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
12 |
if self.request.method != 'POST': |
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
13 |
return None |
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
14 |
elif self.request.mimetype == 'application/json': |
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
15 |
return json.loads(self.request.get_data(as_text=True)) |
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
16 |
else: |
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
17 |
return self.request.form |
b5e0939124b1
qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
18 |
|
110
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
19 |
def headers (self): |
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
20 |
if self.CORS_ORIGIN: |
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
21 |
yield 'Access-Control-Allow-Origin', self.CORS_ORIGIN |
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
22 |
|
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
23 |
if self.CORS_METHODS: |
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
24 |
yield 'Access-Control-Allow-Methods', ', '.join(self.CORS_METHODS) |
7af0b8ce698f
qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents:
108
diff
changeset
|
25 |
|
111
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
26 |
if self.CORS_HEADERS: |
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
27 |
yield 'Access-Control-Allow-Headers', ', '.join(self.CORS_HEADERS) |
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
28 |
|
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
29 |
if self.CORS_CREDENTIALS: |
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
30 |
yield 'Access-Control-Allow-Credentials', 'true' |
530d215d5df1
qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents:
110
diff
changeset
|
31 |
|
108 | 32 |
def render_json(self, **parms): |
33 |
raise NotImplementedError() |
|
34 |
||
35 |
def render_response(self, **params): |
|
36 |
data = self.render_json(**params) |
|
37 |
||
38 |
return json.dumps(data) |
|
39 |