アクセスバス予約サービス


私は、私たちの一人一人が、過去に長い旅をしたし、途中でドロップせずに表現する車両を見つける必要があったことを非常に確信しています.チャンスはあなたの予約オフィスに行って、チケットを取得し、あなたのバスが到着するのを待って、それからボードを離陸.あなたが手動で駅に行く必要があることに注意してください、キューをあなたのフライトチケットを取得します.
これはすべての罰金を与えられる場合は、状況を与えられているが、私たちはあなたの家に座っている間、バスを予約することができますように、あなたのバスのための時間が来たときに旅を開始する必要がありますように、バスのチケットを取得するこのプロセスをデジタル化することができます教えてください.我々は、方法を見に行くつもりです.
ここでは、DJangoを使用してUSSDバス予約システムを作成します.
  • ユーザーはシステム内のすべてのバスを問い合わせることができます
  • ユーザーはバスを予約することができます
  • ユーザーは、フライトのステータスを確認することができます
  • ユーザーは自分のフライトをキャンセルすることができます
  • ユーザーは文句を報告することができます
  • USSDサービスが可能になりましたAfrica'sTalking . 我々は、アプリケーションの実生活のシナリオをシミュレートするためにサンドボックス環境を使用します.更なる話なしで始めましょう!

    プロジェクト設定


    新しいプロジェクトを作成しましょう
    mkdir django_ussd && cd django_ussd
    
    virtualenv env
    
    source env/bin/activate
    
    pip install django
    
    django-admin startproject mysite .
    
    python manage.py startapp core 
    
    次の追加core インストールされているアプリケーションの一覧にsettings.py .
    次のモデルを作成してデータを保持します.
    from django.db import models
    # Create your models here.
    class Bus(models.Model):
        number_plate=models.CharField(
            max_length=10
        )
        start=models.CharField(
            max_length=250
        )
        finish=models.CharField(
            max_length=250
        )
        price = models.FloatField()
        seats=models.IntegerField()
        is_available=models.BooleanField(
            default=True
        )
        def __str__(self) -> str:
            return self.number_plate
    
    class Booking(models.Model):
        STATUS_CHOICES = [ 
        ("Awaiting departure", "Awaiting departure"),
        ("Journey complete", "Journey complete"),
        ("Cancelled", "Cancelled"),
        ]
        bus = models.ForeignKey(Bus, on_delete=models.CASCADE)
        customer = models.CharField(max_length = 150)
        seat=models.IntegerField(default=0)
        date = models.DateTimeField(auto_now_add=True)
        departure=models.DateTimeField(null=True, blank=True)
        status = models.CharField(
            max_length = 20,
            choices = STATUS_CHOICES,
            default = 'Awaiting departure'
            )
        def __str__(self) -> str:
            return self.customer
    
    from django.contrib import admin
    admin.site.register(Bus)
    admin.site.register(Booking)
    
    我々のBus クラスは、指定されたバスに関連するすべての詳細がありますBooking ユーザーチケットを保存します.どうぞmakemigrations then migrate .
    管理ユーザーを作成し、管理セクションに移動し、テストのために使用するいくつかのバスを追加します.
    次に、アプリケーションロジックを書きましょう.オープンviews.py そして以下のコードを追加します.必要であれば、必ずそれを通過し、理解する分を取る.それはかなりまっすぐ前方です.
    import random
    from datetime import datetime, timedelta
    from core.models import Booking, Bus
    from django.views.decorators.csrf import csrf_exempt
    from django.http import HttpResponse
    
    # Create your views here.
    @csrf_exempt
    def index(request):
        if request.method == 'POST':
            session_id = request.POST.get('sessionId')
            service_code = request.POST.get('serviceCode')
            phone_number = request.POST.get('phoneNumber')
            text = request.POST.get('text')
    
            response = ""
    
            if text == "":
                response = "CON Welcome! \n Which service would you like to access? \n"  
                response += "1. List all our buses  \n"
                response += "2. Check ticket status \n"
                response += "3. Book a bus seat \n"
                response += "4. Cancel a booking \n"
                response += "5. Report an issue"
    
             #User needs a list of all buses   
            elif text == "1":
                results=Bus.objects.all()
                for i in results:
                    response += f"END {i}:{i.start}-{i.finish} @KSHS{i.price} \n \n"
    
            elif text == "2":
                response = "CON Choose an option \n"
                response += "1. All tickets \n"
                response += "2. Today active tickets"
    
             #Follow up
            elif text == '2*1':
                tickets=Booking.objects.filter(
                    customer=phone_number
                )
                for tkt in tickets:
                    response += f"END Ticket {tkt.id} on {tkt.departure:%Y-%m-%d %H:%M}"
    
             #Follow up
            elif text == '2*2':
                now = datetime.now()
                tickets=Booking.objects.filter(
                    customer=phone_number,
                    departure__date=now
                )
                if tickets:
                    for tkt in tickets:
                        response += f"END Ticket {tkt.id} on {tkt.departure:%Y-%m-%d %H:%M}"
                response ='END No tickets found'
    
            #User wants to book a seat
            elif text == "3":
                response = "CON Okay, pick a route \n"
                response += "1. Kericho-Nairobi \n"
                response += "2. Kisumu-Eldoret \n"
                response += "3. Nakuru-Mombasa \n"
                response += "4. Narok-Naivasha "
    
            #Follow up
            elif text == '3*1' or '3*2' or '3*3' or '3*4':
                seat=random.randint(1,30)
                buses=Bus.objects.filter(is_available=True)
                buses=[bus for bus in buses]
                bus=random.choices(buses)
                for i in bus:
                    bus=i
                departure=datetime.now() + timedelta(hours=1)
                new_booking=Booking.objects.create(
                    bus=bus,
                    customer=phone_number,
                    seat=seat,
                    departure=departure
    
                )
                response = f"END  Alright! Here is your booking info: \n TICKET NO {new_booking.id} \n Bus Number is {bus} \n Your seat number is {seat} \n Your bus leaves at {departure:%H:%M:%S}"  
            elif text == "4":
                response = "END Feature work in progress, check again soon"
            elif text == "5":
                response = "END Feature work in progress, check again soon"
    
            return HttpResponse(response)
    
    
    それを考えれば、我々はそれのためのルートを作成するために移動することができます.プロジェクトを更新urls.py 以下のように:
    from django.contrib import admin
    from django.urls import path
    from core import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.index),
    ]
    
    
    そして、それは我々が必要とするすべてでなければなりません.次の部分は、私たちのアプリケーションをインターネットに公開することです.このような素晴らしいツールですNgrok . あなたがすでにいないならば、その指示に従ってあなたのマシンにインストールされてください.
    当社のアプリをトンネルするには:
    ngrok http 8000
    
    結果:

    コピーするhttps リンクは、次の必要があります.

    アフリカセットアップ


    あなたのAfrastastalking口座にログインしてください、そして、USSD Partの上でSimulator部クリックをクリックして、新しいセッションをつくるためにクリックしてください.今すぐ追加ngrok コールバックとして動作する前に作成したリンク.コールバックを知っている必要がある場合はhere is a post . フォームは以下のようになります.

    フォームを保存します

    だから私のために、アプリはダイヤルによって呼び出されます*384*1827# あなたのものは少し異なるかもしれませんが、働くべきです.

    シミュレーション


    我々は今、アプリケーションを焼き、我々はサンドボックス環境を設定している.前方に移動し、' USSD 'を選択し、電話を起動するシミュレータを起動します.あなたのコードを入力してください*384*1827# . 動作は次のようになります.

    例えばバスを予約しましょう

    プロンプトが終了すると、バスが出る時間を含む完全な情報を返します.

    先に行くと他のすべてのオプションをテストし、彼らが提供しているものを参照してください.同様にコードにあなたの創造性を追加します.

    包む


    あなたがまだここにいるならば、あなたへの帽子.おめでとう.このチュートリアルでは、輸送問題を解決していました.我々は、乗客予約バスを支援し、USSD経由で関連サービスのオフラインの範囲にアクセスするためにゼロから解決策を構築しました.したがって、機能の携帯電話(Kabambe)かスマートフォンのかどうか、彼らはそれを問題なしにすることができます.
    それは、私があなたのために持っていたすべてです.あなたが問題に遭遇した場合、または下記のコメントに提案がある場合は私に知らせてください.また、可能ならば、このポストに若干の愛を示してください.
    いつものように、あなたはここで、または、よりものすごい内容のために私に続くことができます.
    次回まで、歓声!