日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask框架项目实例:**租房网站(二)

發布時間:2024/7/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask框架项目实例:**租房网站(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • Flask是一款MVC框架,主要是從模型、視圖、模板三個方面對Flask框架有一個全面的認識,
  • 通過完成作者-讀書功能,先來熟悉Flask框架的完整使用步驟。

  • 操作步驟為:
    • 1.創建項目
    • 2.配置數據庫
    • 3.定義模型類
    • 4.定義視圖并配置URL

    • 5.定義模板

  • 前面說了創建項目的流程,今天主要從配置到用戶,主要根據思維導圖來說,先看思維導圖


主要有以下幾個方面: 1.房屋
  • 新建house_views.py,創建藍圖并注冊
  • 需要完成的功能如下:
    • myhouse.html:我的房源
    • newhouse.html:發布新房源
    • index.html:首頁
    • search.html:搜索結果頁
    • detail.html:房屋詳細頁

2.訂單
  • 新建booking_views.py,創建藍圖并注冊
  • 訂單模塊主要包括的功能如下
    • booking.html:預訂頁面
    • orders.html:我的訂單,作為房客的訂單
    • lorders.html:客戶訂單,作為房東的訂單

主要根據思維導圖,代碼加注釋的方法來說明:
1.房屋
  • 新建house_views.py
#coding=utf-8 from flask import Blueprint, jsonify from flask import request from flask import sessionfrom qiniu_sdk import put_qiniu from status_code import REThouse_blueprint=Blueprint('house',__name__)from flask import current_app from flask import jsonfrom models import Area, Facility, HouseImage, House, User, Order#獲取地區信息,并進行緩存 def get_areas():area_dict_list=current_app.redis.get('area_list')if not area_dict_list:area_list=Area.query.all()arear_dict_list=[area.to_dict() for area in area_list]current_app.redis.set('area_list',json.dumps(area_dict_list))else:#存儲到redis后會被轉換成字符串,所以取出來后需要轉換area_dict_list=json.loads(area_dict_list)return area_dict_list#獲取設施信息并緩存 def get_facilities():facility_dict_list=current_app.redis.get('facility_list')if not facility_dict_list:facility_list=Facility.query.all()facility_dict_list=[facility.to_dict() for facility in facility_list]current_app.redis.set('facility_list',json.dumps(facility_dict_list))else:facility_dict_list=json.loads(facility_dict_list)return facility_dict_list@house_blueprint.route('/area_facility',methods=['GET']) def newhouse():#查詢地址kkkkarea_dict_list=get_areas()#查詢設施facility_dict_list=get_facilities()#構造結果并返回return jsonify(area=area_dict_list,faciclity=facility_dict_list)#保存房屋圖片 @house_blueprint.route('/newhouse_image') def newhouse_image():#接受房屋編號house_id=request.form.get('house_id')#接受圖片信息f1=request.files.get('house_image')#保存到七牛云上url=put_qiniu(f1)#保存圖片對象image=HouseImage()image.house_id=house_idimage.url=urlimage.add_update()#房屋的默認圖片house=House.query.get(house_id)if not house.index_image_url:house.index_image_url=urlhouse.add_update()#返回圖片信息return jsonify(code=RET.OK,url=current_app.config.get("QINIU_URL")+url)#保存信息 @house_blueprint.route('/',methods=['POST']) def newhouse_save():#接收數據params=request.form.to_dict()facility_ids=request.form.getlist('facility')#創建對象并保存house = House()house.user_id = session['user_id']house.area_id = params.get('area_id')house.title = params.get('title')house.price = params.get('price')house.address = params.get('address')house.room_count = params.get('room_count')house.acreage = params.get('acreage')house.beds = params.get('beds')house.unit = params.get('unit')house.capacity = params.get('capacity')house.deposit = params.get('deposit')house.min_days = params.get('min_days')house.max_days = params.get('max_days')#根據設施的編號查詢設施對象if facility_ids:facility_list=Facility.query.filter(Facility.id.iin_(facility_ids)).all()house.facilities=facility_listhouse.add_update()#返回結果return jsonify(code=RET.OK,house_id=house.id)#我的房屋 @house_blueprint.route('/',methods=['GET']) def myhouse():user_id=session['user_id']user=User.query.get(user_id)if user.id_name:#已經完成實名認證,查詢當前用戶的房屋信息house_list=House.query.filter(House.user_id==user_id).order_by(House.id.desc())house_list2=[]for house in house_list:house_list2.append(house.to_dict())return jsonify(code=RET.OK,hlist=house_list2)else:#沒有完成實名認證return jsonify(code=RET.USERERR)#查詢房屋與設施,如果是自己的則查詢不出來,目的就是不讓自己預定自己的房子 @house_blueprint.route('/<init:id>',methods=['GET']) def house_detail(id):#查詢房屋信息house=House.query.get(id)#查詢設施信息facility_list=get_facilities()#判斷當前房屋是不是自己booking=1if 'user_id' in session:if house.user_id==session['user_id']:booking=0return jsonify(house=house.to_full_dict(),facility_list=facility_list,booking=booking)#搜索房屋 @house_blueprint.route('/search',methods=['GET']) def search():#接收參數dict=request.argsarea_id=int(dict.get('aid'))begin_date=dict.get('sd')end_date=dict.get('ed')sort_key=dict.get('sk')#滿足地區條件hlist=House.query.filter(House.area_id==area_id)#不能查詢自己發布的房源,排除當前用戶發布的房屋if 'user_id' in session:hlist=hlist.filter(House.user_id!=(session['user_id']))#滿足事件條件,當訂單完成后再完成時間限制order_list=Order.query.filter(Order.status!='REJECTED')#情況一:# order_list1=Order.query.filter(Order.begin_date>=begin_date,Order.end_date<=end_date)#情況二order_list2=Order.query.filter(Order.begin_date<begin_date,Order.end_date>end_date)#情況三order_list3=Order.query.filter(Order.end_date>=begin_date,Order.end_date<=end_date)#情況四:order_list4=Order.query.filter(Order.begin_date>=begin_date,Order.begin_date<=end_date)#獲取訂單中的房屋編號house_ids=[order.house_id for order in order_list2]for order in order_list3:house_ids.append(order.house_id)for order in order_list4:if order.house_id not in house_ids:house_ids.append(order.house_id)hlist=hlist.filter(House.id.notin_(house_ids))#排序規則,默認根據最新排列sort=House.id.desc()if sort_key=='booking':sort=House.order_count.desc()elif sort_key=='price-inc':sort=House.price.asc()elif sort_key=='price-des':sort=House.price.desc()hlist=hlist.order_by(sort)hlist2=[]for house in hlist:hlist2.append(house.to_dict())#獲取地區信息if request.args.get('area','0')=='1':alist=get_areas()else:alist=[]return jsonify(hlist=hlist2,alist=alist)

訂單

  • 新建booking_views.py
# coding=utf-8 from flask import Blueprint,jsonify,request,session order_blueprint=Blueprint('order',__name__) from datetime import datetime from models import House,Order from status_code import RET,ret_map from my_decorators import is_login import logging#查詢指定編號的房屋信息 @order_blueprint.route('/house/<int:id>') def booking_house(id):house=House.query.get(id)return jsonify(house=house.to_dict())#創建訂單 @is_login @order_blueprint.route('/',methods=['POST']) def booking():#接收參數dict=request.formhouse_id=int(dict.get('house_id'))start_date=datetime.strptime(dict.get('start_date'),'%Y-%m-%d')end_date=datetime.strptime(dict.get('end_date'),'%Y-%m-%d')#驗證有效性if not all([house_id,start_date,end_date]):return jsonify(code=RET.PARAMERR,msg=ret_map[RET.PARAMERR])if start_date>end_date:return jsonify(code=RET.PARAMERR,msg=ret_map[RET.PARAMERR])#查詢房屋對象try:house=House.query.get(house_id)except:logging.error(u'下訂單-查詢房屋出錯,房屋編號%d'%house_id)return jsonify(code=RET.DBERR,msg=ret_map[RET.DBERR])#創建訂單對象order=Order()order.user_id=session['user_id']order.house_id=house_idorder.begin_date=start_dateorder.end_date=end_dateorder.days=(end_date-start_date).days+1order.house_price=house.priceorder.amount=order.days*order.house_pricetry:order.add_update()except:logging.error(u'下訂單-出錯')return jsonify(code=RET.DBERR,msg=ret_map[RET.DBERR])#返回信息return jsonify(code=RET.OK)#作為租客查詢訂單 @is_login# @order_blueprint.route('/',methods=['GET']) def orders():uid=session['user_id']order_list=Order.query.filter(Order.user_id==uid).order_by(Order.id.desc())order_list2=[order.to_dict() for order in order_list]return jsonify(olist=order_list2)#作為房東查詢訂單 @is_login @order_blueprint.route('/fd',methods=['GET']) def lorders():uid=session['user_id']#查詢當前用戶的所有房屋編號hlist=House.query.filter(House.user_id==uid)hid_list=[house.id for house in hlist]#根據房屋編號查找訂單order_list=Order.query.filter(Order.house_id.in_(hid_list)).order_by(Order.id.desc())#構造結果olist=[order.to_dict() for order in order_list]return jsonify(olist=olist)#修改狀態 @order_blueprint.route('/<int:id>',methods=['PUT']) def status(id):#接收參數:狀態status=request.form.get('status')#查找訂單對象order=Order.query.get(id)#修改order.status=status#保存order.add_update()return jsonify(code=RET.OK)

完整代碼:https://gitee.com/itpython/ihome/tree/bj14/ihome

總結

以上是生活随笔為你收集整理的Flask框架项目实例:**租房网站(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。