웹찢남

Django 8일차 (pickle) 본문

BACK_END/Django 공부

Django 8일차 (pickle)

harry595 2020. 8. 17. 23:46

pickle을 django에서 사용해보자..

이번에 사용할 피클은 지난번 malicious site detector에서 제작했다

우리가 제작했던 malicious site detector 같은 경우 아주 정확도가 떨어져

이번 프로젝트에서는 포기했다. 지난번의 실수를 생각해보며 phishing site detector을

다른 팀원들이 제작할 예정이다.

 

어쨋든 pkl,pickle 파일이 있다는 것을 전제로 한번 코드를 짜보자.

 

views.py

def test2(request):
    entry_url = request.GET['url_catch']

    if entry_url:
        try:
            queryset = Board2.objects.get(url=entry_url)
        except ObjectDoesNotExist:
            queryset = False
        if(queryset):
            queryset.hits = queryset.hits+1
            queryset.save()
            return render(request, 'user/name.html', {'url': '%s' % entry_url, 'check': 'Exist on DB. It is Phishing site!!!'})
        else:
            vectorizer = pickle.load(open("user/vectorizer.pickle", 'rb'))
            model = joblib.load('user/grad.pkl')
            tmp=[]
            tmp.append(entry_url)
            X_pre = vectorizer.transform(tmp)
            New_pre = model.predict(X_pre)
            fb = Board2(url=entry_url, date=datetime.now(), memo='tmp', hits=1)
            fb.save()
            return render(request, 'user/name.html', {'url': '%s' % entry_url, 'check': 'does not Exist on DB. register new data...', 'test': '%s' % New_pre})
    context = {'url': 'Empty...', 'check': 'url을 입력하세요'}
    return render(request, 'user/name.html', context)

 

코드가 6줄 정도 추가됐다. else문에서 fb가 나오기 전의 코드인데

하나씩 보면 vertorizer.pickle을 로드하여 vectorizer을 선언한다.

또한 model에 학습을 저장한 grad.pkl을 저장한다. 그 후 들어오는 url을 배열화 시키는데

배열화를 안시키고 string 형태로 집어넣으면 에러가 난다.

그 후 vectorizer을 통해 url을 벡터화 한 후 아까 만든 model로 들어온 url에 대해 판단을 한다.

 

이때 vectorizer.pickle의 경우 makeTokens를 선언해 주어야 하는데

manage.py에 선언을 하면 된다. 나의 경우 따로 파일을 만들어

manage.py에서 해당 함수를 import 했다.

 

값이 제대로 나오나 확인을 해보았다.

 

 

잘된다...ㅠ

삽질을 4시간 정도했는데 에러를 10개 정도 고친 것 같다.

시행 착오가 너무 컸다.

 

그리고 전에 Ajax 에서 search를 class로 선언했는데

이렇게 하면 post에러가 난다.. 그냥 def로 하고 html에서도 form - method=post가 아니라

form은 그냥 div로 바꾸고 method 같은걸 없애야 ajax가 원활히 돌아간다.

Comments