1.没有装饰器的——》Django 的注册功能
def register(request
):
result
= None
if request
.method
!= 'POST':
result
= {"error": "此方法仅接受post!"}
else:
try:
user
= User
.objects
.create_user
(request
.POST
['username'],
request
.POST
['email'],
request
.POST
['password'])
for field
in ['first_name', 'last_name']:
if field
in request
.POST
:
setattr(user
, field
, request
.POST
[field
])
user
.save
()
result
= {"success": True}
except KeyError
as e
:
result
= {"error": str(e
) }
response
= HttpResponse
(json
.dumps
(result
))
if "error" in set(result
):
response
.status_code
= 500
return response
2.只有一个装饰器的注册功能
from functools
import wraps
def post_only(f
):
""" 确保方法仅发布 """
@wraps
(f
)
def wrapped_f(request
):
if request
.method
!= "POST":
response
= HttpResponse
(json
.dumps
(
{"error": "此方法仅接受post!"}))
response
.status_code
= 500
return response
return f
(request
)
return wrapped_f
@post_only
def register(request
):
result
= None
try:
user
= User
.objects
.create_user
(request
.POST
['username'],
request
.POST
['email'],
request
.POST
['password'])
for field
in ['first_name', 'last_name']:
if field
in request
.POST
:
setattr(user
, field
, request
.POST
[field
])
user
.save
()
result
= {"success": True}
except KeyError
as e
:
result
= {"error": str(e
) }
response
= HttpResponse
(json
.dumps
(result
))
if "error" in set(result
):
response
.status_code
= 500
return response
3.只有两个装饰器的注册功能
from decorator
import decorator
from functools
import wraps
@decorator
def post_only(f
):
""" 确保方法仅发布 """
@wraps
(f
)
def wrapped_f(request
):
if request
.method
!= "POST":
response
= HttpResponse
(json
.dumps
(
{"error": "此方法仅接受post!"}))
response
.status_code
= 500
return response
return f
(request
)
return wrapped_f
def json_response(f
):
""" 将响应返回为json,如果存在错误,则返回500错误代码 """
def wrapped(*args
, **kwargs
):
result
= f
(*args
, **kwargs
)
response
= HttpResponse
(json
.dumps
(result
))
if type(result
) == dict and 'error' in set(result
):
response
.status_code
= 500
return response
@post_only
@json_response
def register(request
):
try:
user
= User
.objects
.create_user
(request
.POST
['username'],
request
.POST
['email'],
request
.POST
['password'])
for field
in ['first_name', 'last_name']:
if field
in request
.POST
:
setattr(user
, field
, request
.POST
[field
])
user
.save
()
return {"success": True}
except KeyError
as e
:
return {"error": str(e
) }
重新编写登陆功能
@post_only
@json_response
def login(request
):
if request
.user
is not None:
return {"error": "User is already authenticated!"}
user
= auth
.authenticate
(request
.POST
['username'], request
.POST
['password'])
if user
is not None:
if not user
.is_active
:
return {"error": "User is inactive"}
auth
.login
(request
, user
)
return {"success": True, "id": user
.pk
}
else:
return {"error": "User does not exist with those credentials"}
转载请注明原文地址: https://mac.8miu.com/read-508193.html