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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

  • 操作步驟為:
    • 1.創(chuàng)建項目
    • 2.配置數(shù)據(jù)庫
    • 3.定義模型類
    • 4.定義視圖并配置URL

    • 5.定義模板

  • 前面說了創(chuàng)建項目的流程,今天主要從配置到用戶,主要根據(jù)思維導(dǎo)圖來說,先看思維導(dǎo)圖


主要有以下幾個方面: 1.房屋
  • 新建house_views.py,創(chuàng)建藍(lán)圖并注冊
  • 需要完成的功能如下:
    • myhouse.html:我的房源
    • newhouse.html:發(fā)布新房源
    • index.html:首頁
    • search.html:搜索結(jié)果頁
    • detail.html:房屋詳細(xì)頁

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

主要根據(jù)思維導(dǎo)圖,代碼加注釋的方法來說明:
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#獲取地區(qū)信息,并進(jìn)行緩存 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后會被轉(zhuǎn)換成字符串,所以取出來后需要轉(zhuǎn)換area_dict_list=json.loads(area_dict_list)return area_dict_list#獲取設(shè)施信息并緩存 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()#查詢設(shè)施facility_dict_list=get_facilities()#構(gòu)造結(jié)果并返回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()#房屋的默認(rèn)圖片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():#接收數(shù)據(jù)params=request.form.to_dict()facility_ids=request.form.getlist('facility')#創(chuàng)建對象并保存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')#根據(jù)設(shè)施的編號查詢設(shè)施對象if facility_ids:facility_list=Facility.query.filter(Facility.id.iin_(facility_ids)).all()house.facilities=facility_listhouse.add_update()#返回結(jié)果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:#已經(jīng)完成實名認(rèn)證,查詢當(dāng)前用戶的房屋信息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:#沒有完成實名認(rèn)證return jsonify(code=RET.USERERR)#查詢房屋與設(shè)施,如果是自己的則查詢不出來,目的就是不讓自己預(yù)定自己的房子 @house_blueprint.route('/<init:id>',methods=['GET']) def house_detail(id):#查詢房屋信息house=House.query.get(id)#查詢設(shè)施信息facility_list=get_facilities()#判斷當(dāng)前房屋是不是自己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():#接收參數(shù)dict=request.argsarea_id=int(dict.get('aid'))begin_date=dict.get('sd')end_date=dict.get('ed')sort_key=dict.get('sk')#滿足地區(qū)條件hlist=House.query.filter(House.area_id==area_id)#不能查詢自己發(fā)布的房源,排除當(dāng)前用戶發(fā)布的房屋if 'user_id' in session:hlist=hlist.filter(House.user_id!=(session['user_id']))#滿足事件條件,當(dāng)訂單完成后再完成時間限制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))#排序規(guī)則,默認(rèn)根據(jù)最新排列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())#獲取地區(qū)信息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())#創(chuàng)建訂單 @is_login @order_blueprint.route('/',methods=['POST']) def booking():#接收參數(shù)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])#創(chuàng)建訂單對象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']#查詢當(dāng)前用戶的所有房屋編號hlist=House.query.filter(House.user_id==uid)hid_list=[house.id for house in hlist]#根據(jù)房屋編號查找訂單order_list=Order.query.filter(Order.house_id.in_(hid_list)).order_by(Order.id.desc())#構(gòu)造結(jié)果olist=[order.to_dict() for order in order_list]return jsonify(olist=olist)#修改狀態(tài) @order_blueprint.route('/<int:id>',methods=['PUT']) def status(id):#接收參數(shù):狀態(tài)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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。