def searchPhotoByLocation(request): uid = userModel.currentUser(request) context = {} if uid != None: # 搜索信息 searchInfo = request.GET['searchInfo'].strip() pageNum = int(request.GET['page'].strip())-1 photos = photoModel.searchPhotoByLocation(searchInfo, pageNum, 20) context['photos'] = photos context['searchInfo'] = searchInfo context['pageNum'] = pageNum+1 # 获取页数 photoCount = photoModel.getSearchPhotoCount(searchInfo) limitCount = 20 pageLimit = 8 pageCount = math.ceil(photoCount/limitCount) context['count'] = photoCount context['pageCount'] = pageCount # 设置页码信息 pageStart = max(1, pageNum-pageLimit) pageEnd = min(pageCount, pageNum+pageLimit) i = pageStart pageIndexs = [] while i <= pageEnd: pageIndexs.append(i) i = i + 1 context['pageIndexs'] = pageIndexs return render(request, 'search_result.html', context) else: return HttpResponseRedirect('/user/login')
def getPhotoGeoById(request, photoId): uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid photo = photoModel.getPhotoById(photoId) context['photo'] = photo return render(request, 'photo_map.html', context) else: return HttpResponseRedirect('/user/login')
def index(request): uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid # 获取此用户的photo's GEO photos = photoModel.getPhotosByUser(uid, limitCount=0) context['photos'] = photos return render(request, 'footprint.html', context) else: return HttpResponseRedirect('/user/login')
def uploadPhoto(request): uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid if request.method == 'POST': if 'image' in request.FILES: imageFile = request.FILES.get('image') newImgPath, newImgId = photoModel.uploadPhoto(uid, imageFile) # 获取图片 exif 信息 from TRS import settings as setting import exifread filename = setting.TEMPLATES[0]['DIRS'][0] + newImgPath.url fd = open(filename, 'rb') FIELD = 'EXIF DateTimeOriginal' exifTags = exifread.process_file(fd) fd.close() photoTag = {} if FIELD in exifTags: # 照片的拍摄时间 if 'EXIF DateTimeOriginal' in exifTags: takenDate = str(exifTags['EXIF DateTimeOriginal']) photoTag['takenDate'] = takenDate[:4] + '-' + takenDate[5:7] + '-' + takenDate[8:] else: photoTag['takenDate'] = None # 照片的经度、纬度(未考虑正负) if 'GPS GPSLongitude' in exifTags and 'GPS GPSLatitude' in exifTags: longitude = str(exifTags['GPS GPSLongitude']) latitude = str(exifTags['GPS GPSLatitude']) photoTag['longitude'] = GPSChange(longitude[1:-1]) # 去除左右括号 photoTag['latitude'] = GPSChange(latitude[1:-1]) # 去除左右括号 photoTag['location'],photoTag['provinceId'] = getLocation(str(photoTag['latitude']) +"," + str(photoTag['longitude'])) else: photoTag['longitude'] = None photoTag['latitude'] = None photoTag['location'] = None photoTag['provinceId'] = None # 存储照片的 exif 信息 photoModel.updatePhotoExifsById(newImgId, photoTag) return HttpResponseRedirect('/photo/list/1?infoType=success&uploadInfo=上传成功!') else: return HttpResponseRedirect('/photo/list/1?infoType=danger&uploadInfo=上传失败,无文件!', ) else: context['hasInfo'] = False return HttpResponseRedirect('/photo/list/1/') else: return HttpResponseRedirect('/user/login')
def recommend(request, provinceId): uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid simAttractions = [] # 获取某一用户的关联景点 attractioms = attractionModel.getAttractionByUser(uid, 10) for a in attractioms: # 获取景点的相似景点 oneSimAtt = attractionModel.getSimAttraction( a['provinceId'], a['clusterId'], 5, provinceId) for s in oneSimAtt: # 相似景点不重复且不再用户的关联景点中 if s not in simAttractions or s not in attractioms: simAttractions.append(s) # 根据景点id获取景点信息 attractions = [] for a in simAttractions: tempDict = {} tempDict['provinceName'] = photoModel.getProvinceById( a['provinceId']) tempDict['provinceId'] = a['provinceId'] tempDict['clusterId'] = a['clusterId'] # 获取景点照片数量 tempDict['photosCount'] = attractionModel.getAttractionPhotosCount( a['provinceId'], a['clusterId']) # 获取此景点中的一张照片 tempPhotoId = attractionModel.getAttractionPhotoIds( tempDict['provinceId'], tempDict['clusterId'], 1, 1) tempPhoto = photoModel.getPhotoById(tempPhotoId[0]) tempDict['imageUrl'] = tempPhoto['imageUrl'] attractions.append(tempDict) context['attractions'] = attractions if provinceId == 0: context['recommendArea'] = '全国' else: context['recommendArea'] = photoModel.getProvinceById(provinceId) # 获取省份信息 context['provinces'] = photoModel.getAllProvinceNameAndId() return render(request, 'recommend.html', context) else: return HttpResponseRedirect('/user/login')
def AttractionMap(request, provinceId, clusterId): uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid # 获取照片信息 photoIds = attractionModel.getAllAttractionPhotoIds( provinceId, clusterId) photos = [] for pid in photoIds: photos.append(photoModel.getPhotoById(pid)) context['photos'] = photos return render(request, 'attraction_map.html', context) else: return HttpResponseRedirect('/user/login')
def AttractionAlbum(request, provinceId, clusterId, pageNum=1): pageNum = pageNum - 1 uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid context['provinceId'] = provinceId context['clusterId'] = clusterId context['pageNum'] = pageNum + 1 # 获取页数 photoCount = attractionModel.getAttractionPhotosCount( provinceId, clusterId) limitCount = 20 pageLimit = 8 pageCount = math.ceil(photoCount / limitCount) context['count'] = photoCount context['pageCount'] = pageCount # 设置页码信息 pageStart = max(1, pageNum - pageLimit) pageEnd = min(pageCount, pageNum + pageLimit) i = pageStart pageIndexs = [] while i <= pageEnd: pageIndexs.append(i) i = i + 1 context['pageIndexs'] = pageIndexs # 获取照片信息 photoIds = attractionModel.getAttractionPhotoIds( provinceId, clusterId, pageNum, limitCount) photos = [] for pid in photoIds: photos.append(photoModel.getPhotoById(pid)) context['photos'] = photos return render(request, 'attraction_album.html', context) else: return HttpResponseRedirect('/user/login')
def deletePhotoById(request, photoId): uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid if request.method == 'POST': # 获取待删除照片的信息 photo = photoModel.getPhotoById(photoId) # 验证用户 if photo['userName'] == uid: photoModel.deletePhotoById(photoId) return HttpResponseRedirect('/photo/list/1?infoType=success&uploadInfo=操作成功!') else: return HttpResponseRedirect('/photo/list/1?infoType=danger&uploadInfo=操作失败,您没有权限删除非您上传的照片!', ) else: context['hasInfo'] = False return HttpResponseRedirect('/photo/list/1/') else: return HttpResponseRedirect('/user/login')
def getPhotosByUser(request, pageNum): pageNum = pageNum - 1 uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid context['pageNum'] = pageNum+1 # 获取页数 photoCount = photoModel.getUserPhotosCount(uid) limitCount = 20 pageLimit = 8 pageCount = math.ceil(photoCount/limitCount) context['count'] = photoCount context['pageCount'] = pageCount # 设置页码信息 pageStart = max(1, pageNum-pageLimit) pageEnd = min(pageCount, pageNum+pageLimit) i = pageStart pageIndexs = [] while i <= pageEnd: pageIndexs.append(i) i = i + 1 context['pageIndexs'] = pageIndexs # 获取照片信息 photos = photoModel.getPhotosByUser(uid, pageNum, limitCount) context['photos'] = [p for p in photos if p['isDelete']==0] if request.GET.get('infoType') != None: context['hasInfo'] = True context['infoType'] = request.GET.get('infoType') context['uploadInfo'] = request.GET.get('uploadInfo') else: context['hasInfo'] = False return render(request, 'user_album.html', context) else: return HttpResponseRedirect('/user/login')
def random(request, provinceId): uid = userModel.currentUser(request) context = {} if uid != None: context['uid'] = uid simAttractions = [] simAttractions = attractionModel.getRandomAttraction(provinceId, 12) # 根据景点id获取景点信息 attractions = [] for a in simAttractions: tempDict = {} tempDict['provinceName'] = photoModel.getProvinceById( a['provinceId']) tempDict['provinceId'] = a['provinceId'] tempDict['clusterId'] = a['clusterId'] # 获取景点照片数量 tempDict['photosCount'] = attractionModel.getAttractionPhotosCount( a['provinceId'], a['clusterId']) # 获取此景点中的一张照片 tempPhotoId = attractionModel.getAttractionPhotoIds( tempDict['provinceId'], tempDict['clusterId'], 1, 1) tempPhoto = photoModel.getPhotoById(tempPhotoId[0]) tempDict['imageUrl'] = tempPhoto['imageUrl'] attractions.append(tempDict) context['attractions'] = attractions """ if provinceId == 0: context['recommendArea'] = '全国' else: context['recommendArea'] = photoModel.getProvinceById(provinceId) """ context['recommendArea'] = photoModel.getProvinceById(provinceId) # 获取省份信息 context['provinces'] = photoModel.getAllProvinceNameAndId() return render(request, 'random.html', context) else: return HttpResponseRedirect('/user/login')