Django/JSON Response2020. 3. 18. 22:06

VaRest 플러그인을 언리얼 엔진에 설치하고 웹서버(Django)에 로그인하는 예

서버측에서 Template을 이용하지 않고 JSON 포맷으로 응답

 

users 앱 생성

python manage.py startapp users

위의 명령으로 App을 생성한 후에 생성되는 urls.py, views.py를 아래처럼 작성한다

 

users 앱 등록

프로젝트 settings.py 에 위에서 생성한 users 앱을 등록한다

INSTALLED_APPS = [
    'users',    # 새로 추가한 앱
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 

users/urls.py

from django.urls import path 
from . import views

app_name = 'users'
urlpatterns = [
    path('', include('django.contrib.auth.urls')),
    path('register', views.register, name='register'),
    path('login_custom', views.login_custom, name='login_custom'),
]

 

users/views.py

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.http import JsonResponse


def register(request):
    if request.method != 'POST':
        form = UserCreationForm()
    else:
        form = UserCreationForm(data=request.POST)
        if form.is_valid():
            new_user = form.save()
            login(request, new_user)
            return redirect('learning_logs:index')

    context = {'form': form}
    return render(request, 'registration/register.html', context)


def login_custom(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user:
            if user.is_active:
                login(request, user)
                print('request.user=', request.user)
            #return render(request, "users/login_result.html")
            return JsonResponse({'result': true })
        else:
            #return render(request, "users/login_result.html")
            return JsonResponse({'result': false })

 

위의 서버에 UE4 VaRest 플러그인을 사용한 로그인 ( 그림을 클릭하면 그림 전체를 볼 수 있어요~)

 

jQuery를 사용한 로그인 예

Django 서버측에서 users 앱을 생성하고 users/ajax_login 으로 요청하는 경우

 

users/urls.py

from django.urls import path, include
from . import views

app_name = 'users'
urlpatterns = [
    path('', include('django.contrib.auth.urls')),
    path('register', views.register, name='register'),
    path('login_custom', views.login_custom, name='login_custom'),
    path('login_result', views.login_result, name='login_result'),
    path('ajax_login', views.ajax_login, name='ajax_login'),
]

 

users/views.py

def ajax_login(request):
    if request.method != 'POST':
        return render(request, 'users/ajax_login.html')
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user:
            if user.is_active:
                login(request, user)
                print('request.user=', request.user)
            return JsonResponse({"result": True})
        else:
            return JsonResponse({"result": False})

 

urls/templates/users/ajax_login.html

 

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
   $(document).ready(function(){

      console.log('jQuery Ready');
      $.ajax({
            url:'/users/ajax_login',
            data:{'username':'tj', 'password':'tj'},
            dataType:'json',
            method:'post',
            success:function(res) {
                  if(res.result){ alert('로그인 성공'); }
                  else alert('로그인 실패');
            },
            error : function(request, status, error){
                  console.log(error);
            }
      });
});
</script>

Posted by cwisky