fix a few 500 caused by malformed url from search engine bots
This commit is contained in:
parent
4e70b62641
commit
f5124759ee
4 changed files with 22 additions and 3 deletions
|
@ -162,7 +162,7 @@ class DateField(JSONFieldMixin, fields.DateField):
|
|||
if value:
|
||||
if not isinstance(value, (datetime, date)):
|
||||
value = dateparse.parse_date(value)
|
||||
return value.strftime("%Y-%m-%d")
|
||||
return value.strftime("%Y-%m-%d") if value else None
|
||||
|
||||
def from_json(self, value):
|
||||
if value is not None:
|
||||
|
|
|
@ -41,7 +41,10 @@ def retrieve_by_uuid(request, item_uid):
|
|||
|
||||
def retrieve(request, item_path, item_uuid):
|
||||
if request.method == "GET":
|
||||
item = get_object_or_404(Item, uid=base62.decode(item_uuid))
|
||||
# item = get_object_or_404(Item, uid=base62.decode(item_uuid))
|
||||
item = Item.get_by_url(item_uuid)
|
||||
if item is None:
|
||||
return HttpResponseNotFound()
|
||||
item_url = f"/{item_path}/{item_uuid}"
|
||||
if item.url != item_url:
|
||||
return redirect(item.url)
|
||||
|
|
|
@ -117,6 +117,19 @@ class Piece(PolymorphicModel, UserOwnedObjectMixin):
|
|||
def api_url(self):
|
||||
return f"/api/{self.url}" if self.url_path else None
|
||||
|
||||
@classmethod
|
||||
def get_by_url(cls, url_or_b62):
|
||||
b62 = url_or_b62.strip().split("/")[-1]
|
||||
if len(b62) not in [21, 22]:
|
||||
r = re.search(r"[A-Za-z0-9]{21,22}", url_or_b62)
|
||||
if r:
|
||||
b62 = r[0]
|
||||
try:
|
||||
obj = cls.objects.get(uid=uuid.UUID(int=base62.decode(b62)))
|
||||
except:
|
||||
obj = None
|
||||
return obj
|
||||
|
||||
|
||||
class Content(Piece):
|
||||
owner = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||
|
|
|
@ -480,7 +480,10 @@ def collection_edit(request, collection_uuid=None):
|
|||
|
||||
|
||||
def review_retrieve(request, review_uuid):
|
||||
piece = get_object_or_404(Review, uid=base62.decode(review_uuid))
|
||||
# piece = get_object_or_404(Review, uid=base62.decode(review_uuid))
|
||||
piece = Review.get_by_url(review_uuid)
|
||||
if piece is None:
|
||||
return HttpResponseNotFound()
|
||||
if not piece.is_visible_to(request.user):
|
||||
raise PermissionDenied()
|
||||
return render(request, "review.html", {"review": piece})
|
||||
|
|
Loading…
Add table
Reference in a new issue