Add REST api to website and add search functionality to users
This commit is contained in:
parent
1d86851e79
commit
0d288e0d14
@ -16,6 +16,7 @@ from rest_framework.authtoken.views import ObtainAuthToken
|
|||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
from rest_framework.throttling import AnonRateThrottle
|
from rest_framework.throttling import AnonRateThrottle
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
from rest_framework import filters
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class UserViewSet(viewsets.ReadOnlyModelViewSet):
|
class UserViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
@ -25,6 +26,8 @@ class UserViewSet(viewsets.ReadOnlyModelViewSet):
|
|||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
serializer_class = UserSerializer
|
serializer_class = UserSerializer
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
filter_backends = [filters.SearchFilter]
|
||||||
|
search_fields = ['username', 'first_name', 'last_name', 'email']
|
||||||
|
|
||||||
class GroupViewSet(viewsets.ReadOnlyModelViewSet):
|
class GroupViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
"""
|
"""
|
||||||
|
16
shimatta_kenkyusho/static/js/csrf-token.js
Normal file
16
shimatta_kenkyusho/static/js/csrf-token.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
function getCookie(name) {
|
||||||
|
let cookieValue = null;
|
||||||
|
if (document.cookie && document.cookie !== '') {
|
||||||
|
const cookies = document.cookie.split(';');
|
||||||
|
for (let i = 0; i < cookies.length; i++) {
|
||||||
|
const cookie = cookies[i].trim();
|
||||||
|
// Does this cookie string begin with the name we want?
|
||||||
|
if (cookie.substring(0, name.length + 1) === (name + '=')) {
|
||||||
|
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cookieValue;
|
||||||
|
}
|
||||||
|
const csrftoken = getCookie('csrftoken');
|
30
shimatta_kenkyusho/static/js/kenyusho-api-v1.js
Normal file
30
shimatta_kenkyusho/static/js/kenyusho-api-v1.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
function api_ajax_request(method, url, onSuccess, onFail, sendData) {
|
||||||
|
var xmlhttp = new XMLHttpRequest();
|
||||||
|
// csrftoken is set globally
|
||||||
|
xmlhttp.onreadystatechange = function() {
|
||||||
|
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
|
||||||
|
if (xmlhttp.status == 200) {
|
||||||
|
//console.log("Success:"+xmlhttp.responseText);
|
||||||
|
onSuccess(method, url, JSON.parse(xmlhttp.responseText));
|
||||||
|
} else {
|
||||||
|
onFail(method, url, xmlhttp.status, xmlhttp.responseText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlhttp.open(method, url);
|
||||||
|
xmlhttp.setRequestHeader('X-CSRFToken', csrftoken);
|
||||||
|
if (sendData === null || typeof sendData === 'undefined') {
|
||||||
|
xmlhttp.send();
|
||||||
|
} else {
|
||||||
|
xmlhttp.send(JSON.stringify(sendData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function api_ajax_request_without_send(method, url, onSuccess, onFail) {
|
||||||
|
return api_ajax_request(method, url, onSuccess, onFail, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
function api_search_user(search, onSuccess, onFail) {
|
||||||
|
return api_ajax_request_without_send('GET', api_urls_v1['user-list']+`?search=${encodeURIComponent(search)}`, function(method, url, json) {onSuccess(json);}, onFail);
|
||||||
|
}
|
@ -54,7 +54,20 @@
|
|||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
||||||
<script type="text/javascript" src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
|
<script type="text/javascript" src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
|
||||||
<script type="text/javascript" src="{% static 'js/autocomplete.min.js' %}"></script>
|
<!--<script type="text/javascript" src="{% static 'js/autocomplete.min.js' %}"></script>-->
|
||||||
|
<script type="text/javascript" src="{% static 'js/csrf-token.js' %}"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
const api_urls_v1 = {
|
||||||
|
'user-list': '{% url 'user-list' %}',
|
||||||
|
'groups-list': '{% url 'user-list' %}',
|
||||||
|
'storage-list': '{% url 'storage-list' %}',
|
||||||
|
'component-list': '{% url 'component-list' %}',
|
||||||
|
'package-list': '{% url 'package-list' %}',
|
||||||
|
'stock-list': '{% url 'stock-list' %}',
|
||||||
|
'distributor-list': '{% url 'distributor-list' %}',
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="{% static 'js/kenyusho-api-v1.js' %}"></script>
|
||||||
{% block custom_scripts %}
|
{% block custom_scripts %}
|
||||||
{% endblock custom_scripts %}
|
{% endblock custom_scripts %}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user