1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo Cáo Website Đặt Vé Du Lịch

66 80 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

MỞ ĐẦU1. Lí do chọn đề tài.Sự phát triển công nghệ thông tin ở nước ta đang bước vào thời kì mới với việc ứng dụng rộng rải công nghệ thông tin trong tổ chức và xã hội, trong kinh doanh,… Công nghệ thông tin đang từng bước đi vào cuộc sống của chúng ta và có vai trò rất lớn phát triển đất nước. Do đó việc áp dụng công nghệ thông tin vào nhiều ngành, nhiềulĩnh vực rất quan trọng,trong đó có ngành du lịch. Ngành có đóng góp GDP 10% cả nước và là ngành thu nhiều ngoại tệ.Nhận thấy trong những dịp lễ việc mua vé của khách du lịch rất khó khăn,việc mua vé phải di chuyển đến địa điểm bán vé, phải xếp hàng đợi, hết vé phải mua vé qua tay với giá cao,…Vì vậy, website đặt vé du lịch được ra đời.2. Mục tiêu đề tài.Xây dựng một hệ thống đặt vé cho khách du lịch và những người muốn tìm hiểu du lịch một cách thuận tiện nhất với thiết kế hết sức đa dạng, dễ mở rộng. Các tour du lịch phải thể hiện đầy đủ các thông tin cần thiết cho người dung. Ngoài ra hệ thống phải hướng đến việc mở rộng đặt vé du lịch ngoài nước.3. Đối tượng nghiên cứu.Website xây dựng hướng đến người dùng là các khách du lịch và các những người muốn tìm hiểu du lịch.4. Phương pháp nghiên cứu.Với những mục đích nêu trên, để có thể xây dựng hệ thống hoàn chỉnh em đặt ra những phương pháp cụ thể như sau:Sử dụng kiến thức đã học về website, cơ sở dữ liệu để phân tích thiết kế hệ thống một các tối ưu.Khảo sát người dùng để thu thập yêu cầu từ người dùng về một hệ thống mà người dùng đang mong muốn.Tìm hiểu MySQLTìm hiểu DjangoTìm hiểu PythonThực hiện xây dựng phân tích thế kế hệ thống website cho phù hợp5. Bố cục.Chương 1: Giới thiệu về ngôn ngữ sử dụng các thư viện phân tích các ưu nhược điểm. Giới thiệu về cơ sở dữ liệu.Chương 2: Lấy yêu cầu, đánh giá phân tích yêu cầu chức năng để thiết kế website.Chương 3: Thực hiện và đánh giá từ kết quả thu được . CHƯƠNG 1: CƠ SỞ LÝ THUYẾT1.1. Tổng quan về đề tài và cơ sở lý thuyết1.1.1. Sơ đồ BFDSơ đồ chức năng kinh doanh hay mô hình phân rã chức năng trong tiếng Anh là business function diagram, viết tắt là BFD.Sơ đồ chức năng kinh doanh (BFD) được sử dụng để thực hiện phân tích chức năng, mô tả sự phân chia các chức năng thành các chức năng nhỏ hơn trong hệ thống.Mục đích của phân tích chức năng là xác định một cách chính xác và cụ thể các chức năng chính của hệ thống thông tin. Trong giai đoạn phân tích chức năng, người ra phải xác định một cách rõ ràng những gì mà hệ thống sẽ phải thực hiện mà chưa quan tâm tới phương pháp thực hiện các chức năng ấy.Như vậy, việc phân tích phải đề cập đến những mô tả cơ sở ban đầu. Các mô tả này sẽ được trình bày rõ ràng trong một tài liệu gửi cho người sử dụng phê chuẩn trước khi tiến hành những công việc tiếp theo. 11.1.2. Sơ đồ DFDSơ đồ luồng dữ liệu trong tiếng Anh là Data Flow Diagram, viết tắt là DFD.Sơ đồ luồng dữ liệu (DFD) là một mô hình hệ thống cân xứng cả dữ liệu và tiến trình (progress). Nó chỉ ra cách thông tin chuyển vận từ một tiến trình hoặc từ chức năng này trong hệ thống sang một tiến trình hoăc chức năng khác.Với sơ đồ BFD, chúng ta đã xem xét hệ thống thông tin theo quan điểm chức năng thuần túy. Bước tiếp theo trong quá trình phân tích là xem xét chi tiết hơn về các thông tin cần cho việc thực hiện các chức năng đã được nêu và những thông tin cần cung cấp để hoàn thiện chúng. Công cụ mô hình được sử dụng cho mục đích này là sơ đồ luồng dữ liệu DFD.DFD là công cụ dùng để trợ giúp cho bốn hoạt động chính sau đây của các phân tích viên hệ thống trong quá trình phân tích thông tin: Phân tích: DFD được dùng để xác định yêu cầu của người sử dụng Thiết kế: DFD dùng để vạch kế hoạch và minh họa các phương án cho phân tích viên hệ thống và người dùng khi thiết kế hệ thống mới. Biểu đạt: DFD là công cụ đơn giản, dễ hiểu đối với phân tích viên hệ thống và người dùng Tài liệu: DFD cho phép biểu diễn tài liệu phân tích hệ thống một cách đầy đủ, súc tích và ngắn gọn. DFD cung cấp cho người sử dụng một cái nhìn tổng thể về hệ thống và cơ chế lưu chuyển thông tin trong hệ thống đó.Sơ đồ ngữ cảnh (Context diagram): đầy là sơ đồ mức cao nhất. Nó cho ra một cái nhìn tổng quát về hệ thống trong môi trường nó đang tồn tại. Ở mức này, sơ đồ ngữ cảnh chỉ có một tiến trình duy nhất, các tác nhân và các luồng dữ liệu (không có kho dữ liệu).Sơ đồ mức 0 là sơ đồ phân rã từ sơ đồ ngữ cảnh. Với mục đích mô tả hệ thống chi tiết hơn, sơ đồ mức 0 được phân rã từ sơ đồ ngữ cảnh với các tiến trình được trình bày chính là các mục chức năng chính của hệ thống.Sơ đồ mức i (i >= 1) là sơ đồ được phân rã từ sơ đồ mức i1. Mỗi sơ đồ phân rã mức sua chính là sự chi tiết hóa một tiến trình mức trước. Quá trình phân rã sẽ dừng khi đạt được sơ đồ luồng dữ liệu sơ cấp (khi một tiến trình là một tính toán hay thao tác dữ liệu đơn giản, khi mỗi luồng dữ liệu không cần chia nhỏ hơn nữa. Để dễ dàng cho việc xây dựng sơ đồ luồn dữ liệu người ta phải dựa vào sơ đồ chức năng kinh doanh BFD trên nguyên tắc mỗi chức năng tương ứng.

LỜI MỞ ĐẦU Hiện việc ứng dụng công nghệ thông tin xem yếu tố định hoạt động kinh doanh cá nhân, cơng ty doanh nghiệp đóng vai trò quan trọng để tạo đột phá mạnh mẽ Cùng với phát triển mạng Internet Trong sản xuất, kinh doanh thúc đẩy mạnh mẽ thông qua thương mại điện tử Đối với cửa hàng hay shop việc tiếp cận, quảng bá, giới thiệu, tạo nhiều điều kiện thuận lợi thỏa mãn nhu cầu khách hàng Vậy nên, em thực đồ án “Xây dựng website đặt vé du lịch” để tạo nhiều điều kiện thuận lợi cho khách hàng quảng bá du lịch Việt Nam Em xin chân thành cảm ơn trực tiếp bảo hưỡng dẫn em suốt q trình hồn thành khóa luận Và em xin cảm ơn tất thầy Khoa Tin học nhiệt tình giúp đỡ đào tạo em thời gian vừa qua Em xin trân trọng cảm ơn! Đà Nẵng, ngày tháng năm 2020 Sinh viên thực Ý KIẾN CỦA GIẢNG VIÊN HƯỚNG DẪN Đà Nẵng, ngày tháng năm 2020 Cán hướng dẫn MỤC LỤC MỞ ĐẦU 1.1 Lí chọn đề tài 1.2 Mục tiêu đề tài 1.3 Đối tượng nghiên cứu 1.4 Phương pháp nghiên cứu .1 1.5 Bố cục CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Tổng quan đề tài sở lý thuyết 1.2 Công nghệ sử dụng CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ WEBSITE 2.1 Phân tích yêu cầu hệ thống 2.1.1 Mô tả hệ thống .9 2.1.2 Yêu cầu chức hệ thống .9 2.1.3 Yêu cầu phi chức 2.2 Phân tích thiết kế hệ thống .9 2.2.1 Sơ đồ BFD 2.2.2 Sơ đồ DFD 10 2.2.3 Sơ đồ ERD 23 2.2.4 Mơ hình liệu quan hệ 25 CHƯƠNG 3: TRIỂN KHAI VÀ KẾT QUẢ ĐẠT ĐƯỢC .30 3.1 Triển khai môi trường làm việc 30 3.2 Kết đạt 30 CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .43 4.1 Các kết đạt 43 4.2 Nhận xét đề xuất .43 4.3 Hướng phát triển 43 TÀI LIỆU THAM KHẢO 44 PHỤ LỤC MÃ NGUỒN 45 DANH MỤC HÌNH ẢNH Hình Cấu trúc tập tin mô hình MVT Hình Sơ đồ BFD 10 Hình Sơ đồ ngữ cảnh 11 Hình DFD Chức luồng hệ thống 12 Hình DFD Đăng kí tài khoản 13 Hình DFD Xem thông tin tour 14 Hình DFD Đăng nhập 14 Hình DFD Thay đổi thông tin cá nhân 15 Hình DFD Đặt vé 15 Hình 10 DFD Bình luận 16 Hình 11 DFD Đăng blog .16 Hình 12 DFD Quản lý thông tin tài khoản 17 Hình 13 DFD Reset mật .18 Hình 14 DFD Quản lý tour 19 Hình 15 DFD Quản lý điểm đến 20 Hình 16 DFD Quản lý comment 21 Hình 17 DFD Quản lý đặt vé 21 Hình 18 DFD Quản lý blog 22 Hình 19 DFD Đặt vé,thanh toán 22 Hình 20 Sơ đồ ERD .25 Hình 21 Sơ đồ liệu quan hệ .29 DANH MỤC BẢNG Bảng User 26 Bảng Blog 26 Bảng Comment 27 Bảng Booking 27 Bảng Role 27 Bảng Photo 27 Bảng Tour 28 Bảng Destination 28 Bảng Area 28 MỞ ĐẦU 1.1 Lí chọn đề tài Sự phát triển công nghệ thông tin nước ta bước vào thời kì với việc ứng dụng rộng rải công nghệ thông tin tổ chức xã hội, kinh doanh,… Công nghệ thông tin bước vào sống có vai trị lớn phát triển đất nước Do việc áp dụng cơng nghệ thơng tin vào nhiều ngành, nhiềulĩnh vực quan trọng,trong có ngành du lịch Ngành có đóng góp GDP 10% nước ngành thu nhiều ngoại tệ Nhận thấy dịp lễ việc mua vé khách du lịch khó khăn,việc mua vé phải di chuyển đến địa điểm bán vé, phải xếp hàng đợi, hết vé phải mua vé qua tay với giá cao,…Vì vậy, website đặt vé du lịch đời 1.2 Mục tiêu đề tài Xây dựng hệ thống đặt vé cho khách du lịch người muốn tìm hiểu du lịch cách thuận tiện với thiết kế đa dạng, dễ mở rộng Các tour du lịch phải thể đầy đủ thông tin cần thiết cho người dung Ngoài hệ thống phải hướng đến việc mở rộng đặt vé du lịch nước 1.3 Đối tượng nghiên cứu Website xây dựng hướng đến người dùng khách du lịch người muốn tìm hiểu du lịch 1.4 Phương pháp nghiên cứu Với mục đích nêu trên, để xây dựng hệ thống hoàn chỉnh em đặt phương pháp cụ thể sau: - Sử dụng kiến thức học website, sở liệu để phân tích thiết kế hệ thống tối ưu - Khảo sát người dùng để thu thập yêu cầu từ người dùng hệ thống mà người dùng mong muốn - Tìm hiểu MySQL - Tìm hiểu Django - Tìm hiểu Python - Thực xây dựng phân tích kế hệ thống website cho phù hợp 1.5 Bố cục Chương 1: Giới thiệu ngôn ngữ sử dụng thư viện phân tích ưu nhược điểm Giới thiệu sở liệu Chương 2: Lấy yêu cầu, đánh giá phân tích yêu cầu chức để thiết kế website Chương 3: Thực đánh giá từ kết thu CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Tổng quan đề tài sở lý thuyết 1.1.1 Sơ đồ BFD Sơ đồ chức kinh doanh hay mơ hình phân rã chức tiếng Anh business function diagram, viết tắt BFD Sơ đồ chức kinh doanh (BFD) sử dụng để thực phân tích chức năng, mô tả phân chia chức thành chức nhỏ hệ thống Mục đích phân tích chức xác định cách xác cụ thể chức hệ thống thơng tin Trong giai đoạn phân tích chức năng, người phải xác định cách rõ ràng mà hệ thống phải thực mà chưa quan tâm tới phương pháp thực chức Như vậy, việc phân tích phải đề cập đến mô tả sở ban đầu Các mơ tả trình bày rõ ràng tài liệu gửi cho người sử dụng phê chuẩn trước tiến hành công việc [1] 1.1.1 Sơ đồ DFD Sơ đồ luồng liệu tiếng Anh Data Flow Diagram, viết tắt DFD Sơ đồ luồng liệu (DFD) mơ hình hệ thống cân xứng liệu tiến trình (progress) Nó cách thơng tin chuyển vận từ tiến trình từ chức hệ thống sang tiến trình hoăc chức khác Với sơ đồ BFD, xem xét hệ thống thông tin theo quan điểm "chức năng" túy Bước q trình phân tích xem xét chi tiết thông tin cần cho việc thực chức 45 PHỤ LỤC MÃ NGUỒN -Đăng nhập đăng xuất: Sử dụng authenticate django from django.contrib.auth import login, authenticate -Xử lý trang đăng kí: def signup(request): if request.method == 'POST': form = SignUpForm(request.POST) if form.is_valid(): user = form.save() user.refresh_from_db() user.profile.gender = form.cleaned_data.get('gender') user.profile.phone_number = form.cleaned_data.get('phone_number') user.profile.country = form.cleaned_data.get('country') user.save() raw_password = form.cleaned_data.get('password1') user=authenticate(username=user.username, password=raw_password) login(request, user) messages.info(request,'Tài khoản bạn tạo') return redirect('index') else: form = SignUpForm() context={ 'form':form } return render(request, 'registration/signup.html', context) 45 46 -Xử lý trang chủ: def index(request): destinations=Area.objects.prefetch_related('areas', 'areas tours').annotate(num_tour=Count('areas tours'))[:6] sliders = Slider.objects.all() blogs = Blog.objects.select_related('user')[:3] context = { 'destinations' : destinations, 'sliders' : sliders, 'places' : Tour.get_tour_list(6), 'blogs' : blogs, } return render(request, 'index.html', context) -Xử lý trang giới thiệu: def about(request): done_bookings = Booking.objects.filter(status_booking=1) tour_totals = Tour.objects.count() clients = User.objects.count() blogs = Blog.objects.select_related('user')[:3] context = { 'bookings' : done_bookings.count, 'tour_totals' : tour_totals, 'clients' : clients, 'blogs' : blogs, } return render(request, 'about.html', context) -Xử lý phân trang: 46 47 def pagination(request,self): page = request.GET.get('page', 1) paginator = Paginator(self, 10) try: result = paginator.page(page) except PageNotAnInteger: result = paginator.page(1) except EmptyPage: result = paginator.page(paginator.num_pages) return result -Xử lý thông tin địa điểm: def destination(request): places = pagination(request,Tour.get_tour_list(6)) blogs = Blog.objects.select_related('user')[:3] context = { 'places' : places, 'blogs' : blogs } return render(request, 'destination.html', context) -Tìm kiếm: Xử dụng SearchResultsView trả kết ListView: class SearchResultsView(ListView): model = Tour template_name = 'search.html' def get_queryset(self): query = self.request.GET.get('q') object_list = Tour.objects.filter( Q(tour_name icontains=query) | Q(destination location_to icontains=query) 47 48 ) return object_list -Xử lý hồ sơ cá nhân: @login_required def profile(request, pk): if request.user.pk == pk: p= get_object_or_404(User.objects.prefetch_related('booking'), pk=pk) else: messages.warning(request,'Không thể tìm thấy trang này') return redirect('index') context = { 'p' : p, } return render(request, 'profile.html', context) -Đăng blog: def blog(request): blogs = Blog.objects.select_related('user') recent_post = Blog.objects.all().order_by('-date')[:6] tag = Blog.objects.values('tag').annotate(num_tag=Count('id')) if request.method == 'POST': if request.user.is_authenticated: form=BlogForm(request.POST, request.FILES) if form.is_valid(): blog = form.save(commit=False) blog.content = form.cleaned_data.get('content') blog.title = form.cleaned_data.get('title') blog.tag = form.cleaned_data.get('tag') blog.user = request.user blog.image = form.cleaned_data.get('image') blog.save() messages.info(request,'Đăng thành công') 48 49 return redirect('blog') else: return redirect('index') else: return redirect('login') else: form=BlogForm() context = { 'form' : form, 'tag' : tag, 'blogs' : blogs, 'recent_post' : recent_post } return render(request, 'blog.html', context) -Liên hệ: def contact(request): return render(request, 'contact.html') -Chi tiết blog: def blog_detail(request, pk): blog = get_object_or_404(Blog.objects.select_related('user'), pk=pk) recent_post = Blog.objects.all().order_by('-date')[:6] tag = Blog.objects.values('tag').annotate(num_tag=Count('id')) context = { 'tag' : tag, 'blog' : blog, 'recent_post' : recent_post } return render(request, 'blog_detail.html', context) 49 50 -Quản trị trang web:Sử dụng django-admin, giao diện quản trị tự động, cần cung cấp model-centric cho from django.contrib import admin @admin.register(Destination) class DestinationAdmin(admin.ModelAdmin): list_display = ('id', 'location_from', 'location_to', 'destination_name', 'area') list_per_page = 10 @admin.register(Booking) class BookingAdmin(admin.ModelAdmin): list_display = ('id', 'profile', 'tour', 'status_booking','booking_time', 'people_number','tota list_per_page = 10 @admin.register(Slider) class SliderAdmin(admin.ModelAdmin): list_display = ('id', 'slider_image','title', 'teaser') @admin.register(Blog) class BlogAdmin(admin.ModelAdmin): list_display = ('title', 'content', 'date', 'tag', 'image') list_per_page = 10 @admin.register(Tour) class TourAdmin(admin.ModelAdmin): list_display = ('id', 'tour_name', 'experience_time','price','start_day', 'end_day', 'min_age', 'max_people', 'status_evaluete','short_tour_detail') list_per_page = 10 - Bình luận chi tiết tour: def destination_detail(request,pk): 50 51 tour = get_object_or_404(Tour.objects.prefetch_related('tour_photo', 'review'), pk=pk) if request.method == 'POST': if request.user.is_authenticated: if 'comment' in request.POST: formcmt = CommentForm(request.POST) if formcmt.is_valid(): review = formcmt.save(commit=False) review.author = request.user review.tour = tour review.content = formcmt.cleaned_data.get('content') review.save() return redirect('destination_detail', pk=pk) else: return redirect('destination_detail', pk=pk) if 'booking' in request.POST: form = BookingForm(request.POST) if form.is_valid(): booking = form.save(commit=False) num_people = form.cleaned_data.get('people_number') request.session['tour_id'] = pk request.session['people_number'] = num_people request.session['total_price'] = num_people*int(tour.price) return redirect('order') else: return redirect('destination_detail', pk=pk) else: return redirect('login') 51 52 else: form = BookingForm() formcmt = CommentForm() context = { 'tours' : Tour.get_tour_list(3), 'tour' : tour, 'form':form, 'formcmt' : formcmt, } return render(request, 'destination_detail.html', context) 52 53 -Xử lý oder : @login_required def order(request): tour_id = request.session.get('tour_id') total_price = request.session.get('total_price') people_number = request.session.get('people_number') tour = Tour.objects.get(pk=tour_id) booking_time = datetime.datetime.now() booking = { 'booking_time' : booking_time, 'tour' : tour, 'total_price' : total_price, 'people_number' : people_number, } context = { 'booking' : booking,} return render(request, 'order.html', context) -Thanh toán PayPal Stripe: @csrf_exempt def payment_done(request): tour_id = request.session.get('tour_id') 53 54 total_price = request.session.get('total_price') people_number = request.session.get('people_number') tour = Tour.objects.get(pk=tour_id) booking = Booking.objects.create(profile=request.user,tour=tour, people_number=people_number, total_price=total_price,) booking.status_booking = booking.save() context = { 'booking' : booking, 'tour' : tour, } return render(request, 'done.html', context) @csrf_exempt def payment_canceled(request): messages.warning(request, 'Thanh tốn khơng thành cơng') return redirect('index') def payment_process(request): tour_id = request.session.get('tour_id') total_price = request.session.get('total_price') tour = Tour.objects.get(pk=tour_id) price = total_price/23178 host = request.get_host() paypal_dict = { 'business': settings.PAYPAL_RECEIVER_EMAIL, 'amount': '%.2f' % price, 'amount': '200', 54 55 'item_name': ' {}'.format(tour.tour_name), 'invoice': '', 'currency_code': 'USD', 'notify_url': 'http://{}{}'.format(host, reverse('paypal-ipn')), 'return_url': 'http://{}{}'.format(host, reverse('done')), 'cancel_return': 'http://{}{}'.format(host, reverse('cancelled')), } form = PayPalPaymentsForm(initial=paypal_dict) context = { 'form': form, } return render(request, 'payment_process.html', context) @csrf_exempt def stripe_config(request): if request.method == 'GET': stripe_config = {'publicKey': settings.STRIPE_PUBLISHABLE_KEY} return JsonResponse(stripe_config, safe=False) @csrf_exempt def create_checkout_session(request): tour_id = request.session.get('tour_id') total_price = request.session.get('total_price') tour = Tour.objects.get(pk=tour_id) price = total_price/23178 host = request.get_host() if request.method == 'GET': 55 56 domain_url = 'http://localhost:8000/' stripe.api_key = settings.STRIPE_SECRET_KEY try: checkout_session = stripe.checkout.Session.create( success_url=domain_url + 'payment/done? session_id={CHECKOUT_SESSION_ID}', cancel_url='http://{}{}'.format(host, reverse('cancelled')), payment_method_types=['card'], mode='payment', line_items=[ { 'name': tour.tour_name, 'quantity': 1, 'currency': 'usd', 'amount': int(price)*100, } ] ) return JsonResponse({'sessionId': checkout_session['id']}) except Exception as e: return JsonResponse({'error': str(e)}) -Model:Trong model sử dụng authentication User quan hệ 1-1 với Profile from django.contrib.auth.models import User class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True) birthdate = models.DateField(null=True, blank=True) gender = 56 57 models.IntegerField(choices=GENDER_CHOICES, blank=True, null=True, default=1) phone_number = models.CharField(validators=[phone_regex], max_length=10, blank=True) country = models.CharField(max_length=100, blank=True) image = models.ImageField(upload_to='images/profile', null=True) class Area(models.Model): area_name = models.CharField(max_length=100, blank=True) image = models.ImageField(upload_to='images/area') class Destination(models.Model): area = models.ForeignKey(Area, on_delete=models.CASCADE, related_name='areas') location_from = models.TextField(max_length=50, blank=True) location_to = models.TextField(max_length=50, blank=True) destination_name = models.CharField(max_length=70, blank=True) class Tour(models.Model): 57 58 destination = models.ForeignKey( Destination, on_delete=models.CASCADE, related_name='tours' ) tour_name = models.TextField(max_length=80, null=True, blank=True) experience_time = models PositiveIntegerField(validators =[MinValueValidator(1)]) price = models.DecimalField(max_digits=10, decimal_places=0) start_day = models.DateField(null=True, blank=True) end_day = models.DateField(null=True, blank=True) min_age = models.PositiveIntegerField(validators =[MinValueValidator(2)]) max_people = models.IntegerField(validators= [MinValueValidator(1)]) status_evaluete = models.IntegerField(choices=STATUS_E_CHOICES, default=0) detail_tour = models.TextField() votes = models.IntegerField(default=0) class Booking(models.Model): profile = models.ForeignKey(User, on_delete=models.CASCADE, related_name='booking') tour = models.ForeignKey(Tour, on_delete=models.CASCADE) status_booking = models.IntegerField (choices=STATUS_B_CHOICES, default=0) booking_time = models.DateField (auto_now_add=True) people_number = models.PositiveIntegerField (validators=[MinValueValidator(1)]) total_price = models DecimalField(max_digits=10 58 59 , decimal_places=0) class Blog(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=150) content = models.TextField() date = models.DateField(auto_now_add=True) tag = models.CharField(max_length=50) image = models.ImageField(upload_to='images/blogs/') class Slider(models.Model): slider_image = models.ImageField(upload_to='images/sliders', blank=True) title = models.CharField(max_length=100) teaser = models.TextField('teaser', blank=True) class Photo(models.Model): tour = models.ForeignKey(Tour, on_delete=models.CASCADE, related_name='tour_photo') image = models.ImageField(upload_to='images/tours') class Review(models.Model): tour= models.ForeignKey(Tour, on_delete=models.CASCADE, related_name='review') author = models.ForeignKey(User, on_delete=models.CASCADE) content = models.TextField() date = models.DateTimeField(auto_now_add=True) 59 ... hàng đợi, hết vé phải mua vé qua tay với giá cao,…Vì vậy, website đặt vé du lịch đời 1.2 Mục tiêu đề tài Xây dựng hệ thống đặt vé cho khách du lịch người muốn tìm hiểu du lịch cách thuận tiện với... ngành du lịch Ngành có đóng góp GDP 10% nước ngành thu nhiều ngoại tệ Nhận thấy dịp lễ việc mua vé khách du lịch khó khăn,việc mua vé phải di chuyển đến địa điểm bán vé, phải xếp hàng đợi, hết vé. .. dạng, dễ mở rộng Các tour du lịch phải thể đầy đủ thông tin cần thiết cho người dung Ngoài hệ thống phải hướng đến việc mở rộng đặt vé du lịch nước 1.3 Đối tượng nghiên cứu Website xây dựng hướng

Ngày đăng: 31/03/2021, 22:48

Xem thêm:

TỪ KHÓA LIÊN QUAN

w