บทเรียนการสร้าง Web Application ด้วย Firebase Authentication บน Django และ Python การทำระบบ Sign Up สมัครสมาชิก
บทเรียนก่อนหน้าที่ควรศึกษา:
- การพัฒนา Web Application บน Python ด้วย Django Framework
- สร้าง Web Application ด้วย Python Django เข้าระบบด้วยการทำ Firebase Authentication
ต่อเนื่องจากบทเรียนก่อนหน้า ทันที ในรอบนี้เราจะทำรับบ Register หรือ Sign Up โดยใช้ Firebase Authentication เรียกผ่านฟังก์ชัน
create_user_with_email_and_password()
ให้เราเปิดไฟล์ urls.py ขึ้นมาจากของเก่าคือ:
from django.conf.urls import url from django.contrib import admin from . import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.home), url(r'^signin/', views.signin), url(r'^result/', views.result) ]
เพิ่ม register เป็นหน้า HTML และสร้างฟังก์ชัน signup เป็นการประมวลผลส่งค่า Email, Name และ Password ไปยัง Firebase
from django.conf.urls import url from django.contrib import admin from . import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.home), url(r'^signin/', views.signin), url(r'^result/', views.result), url(r'^register/', views.register), url(r'^signup/',views.signup,name='signup'), ]
ดังนั้นให้เราไปที่ Folder ชื่อ templates ให้เราสร้าง HTML ขึ้นมาชื่อว่า register.html
{% if msg %} <script> alert('{{msg}}') </script> {% endif %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="apple-touch-icon" type="image/png" href="https://static.codepen.io/assets/favicon/apple-touch-icon-5ae1a0698dcc2402e9712f7d01ed509a57814f994c660df9f7a952f3060705ee.png" /> <meta name="apple-mobile-web-app-title" content="CodePen"> <link rel="shortcut icon" type="image/x-icon" href="https://static.codepen.io/assets/favicon/favicon-aec34940fbc1a6e787974dcd360f2c6b63348d4b1f4e06c77743096d55480f33.ico" /> <link rel="mask-icon" type="" href="https://static.codepen.io/assets/favicon/logo-pin-8f3771b1072e3c38bd662872f6b673a722f4b3ca2421637d5596661b4e2132cc.svg" color="#111" /> <title>Sign-in</title> <link rel='stylesheet' href='https://fonts.googleapis.com/icon?family=Material+Icons'> <link rel='stylesheet' href='https://storage.googleapis.com/code.getmdl.io/1.0.1/material.teal-red.min.css'> <link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Roboto:300,400,500,700'> <style> .mdl-layout { align-items: center; justify-content: center; } .mdl-layout__content { padding: 24px; flex: none; } </style> <script> window.console = window.console || function (t) { }; </script> <script> if (document.location.search.match(/type=embed/gi)) { window.parent.postMessage("resize", "*"); } </script> </head> <body translate="no"> <div class="mdl-layout mdl-js-layout mdl-color--grey-100"> <main class="mdl-layout__content"> <div class="mdl-card mdl-shadow--6dp"> <div class="mdl-card__title mdl-color--primary mdl-color-text--white"> <h2 class="mdl-card__title-text">Register</h2> </div> <div class="mdl-card__supporting-text"> <form action="/signup/" method="POST"> {% csrf_token %} <div class="mdl-textfield mdl-js-textfield"> <input class="mdl-textfield__input" type="text" id="fullname" name="fullname" /> <label class="mdl-textfield__label" for="fullname">Full Name...</label> </div> <div class="mdl-textfield mdl-js-textfield"> <input class="mdl-textfield__input" type="email" id="email" name="email" /> <label class="mdl-textfield__label" for="email">Email Address...</label> </div> <div class="mdl-textfield mdl-js-textfield"> <input class="mdl-textfield__input" type="password" id="pass" name="pass" /> <label class="mdl-textfield__label" for="pass">Password</label> </div> <div class="mdl-card__actions mdl-card--border"> <input type="submit" class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect" value="Sign-up"/> </div> </form> </div> </div> </main> </div> <script src='https://storage.googleapis.com/code.getmdl.io/1.0.1/material.min.js'></script> </body> </html>
หลังจากนั้นให้เราเปิด views.py ขึ้นมาเพิ่ม ฟังก์ชันนี้เข้าไป:
def register(request): return render(request, "register.html")
เพื่อกำหนด Routing ของ register ไปเรียก Render ไฟล์ register.html ต่อจากนั้นสร้าง signup เป็นการประมวลผลส่งค่า:
def signup(request): fullname = request.POST.get('fullname') email = request.POST.get('email') password = request.POST.get('pass') try: user = auth.create_user_with_email_and_password(email, password) uid = user['localId'] data = {"name": fullname, "status": "1"} database.child("users").child(uid).child("details").set(data) except: message = "Unable to create account try again" return render(request, "signup.html", {"msg": message}) return render(request, "signin.html")
ไฟล์ views.py จะเป็นดังนี้:
import pyrebase from django.http import HttpResponse from django.shortcuts import render from django.contrib import auth config = { 'apiKey': "AIzaSyDUFgVOBI1mGpoESnvcq6qIE8z2BzSijVE", 'authDomain': "fir-app-68c4f.firebaseapp.com", 'databaseURL': "https://fir-app-68c4f.firebaseio.com", 'projectId': "fir-app-68c4f", 'storageBucket': "fir-app-68c4f.appspot.com", 'messagingSenderId': "239247887438", 'appId': "1:239247887438:web:1ee3d672ee6f8cc466871f" } firebase = pyrebase.initialize_app(config) auth = firebase.auth() database=firebase.database() def home(request): return render(request, "index.html") def signin(request): return render(request, "signin.html") def register(request): return render(request, "register.html") def result(request): email = request.POST.get('email') password = request.POST.get("pass") try: user = auth.sign_in_with_email_and_password(email, password) except: message = "invalid cerediantials" return render(request, "signin.html", {"msg": message}) print(user) return render(request, "main.html", {"e": email}) def signup(request): fullname = request.POST.get('fullname') email = request.POST.get('email') password = request.POST.get('pass') try: user = auth.create_user_with_email_and_password(email, password) uid = user['localId'] data = {"name": fullname, "status": "1"} database.child("users").child(uid).child("details").set(data) except: message = "Unable to create account try again" return render(request, "signup.html", {"msg": message}) return render(request, "signin.html")
เปิด Terminal หรือ cmd ขึ้นมา รันคำสั่ง:
$ python3 manage.py runserver 0.0.0.0:8000
เปิดหน้าเว็บไซต์ไปที่ http://localhost:8000/register
ลองกรอกค่าสมัครเข้าไป ถ้าสมัครผ่านให้ไปดูข้อมูลที่ Real-Time Database และ Authentication ใน Firebase:
ไปตรวจดูส่วนของสมาชิกหน่อย:
เรียบร้อยแล้วหน้าจอสมัครสมาชิกเก็บข้อมูลเข้า Firebase