-
Notifications
You must be signed in to change notification settings - Fork 7
Description
Hey Sadra,
I wish you doing well, thank you for this great project, PasteMe has become one of my favorite online tools for sure.
I've viewed the project codebase and like to share my opinions on a couple of things that caught my 👀, so we share ideas about them here. I hope these make everything a little better and make the project to move forward.
None of my recommindations would have any affects on the core website functionality, they are more related to back-end enhancments and visual aspects of the project.
1. Snippet UUID Alphabet,
You have used 12 characters abcdefg12345 as ShortUUIDField in Snippet model file, here is the code.
Lines 8 to 13 in 4916a92
| id = ShortUUIDField( | |
| length=5, | |
| max_length=40, | |
| alphabet="abcdefg12345", | |
| primary_key=True, | |
| ) |
These characters will make string module character groups and extending the alphabet to English letters and digits!
from string import ascii_letters, digits
alphabet = ascii_letters + digitsThis way, the system will be able to create
This number can be shrinked by using smaller, but big-enouph, character groups like
ascii_lowercaseorascii_uppercase. They will support$\approx 11M$ UUIDs.
I've done this in my 🍴, would be happy to open a PR if you're intrested.
2. Using Code Formatters,
After cloning the codebase on my machine, I've noticed that every file I visit is marked as edited via Git! It happens because of the Final new line that my code editor appends to each file, There are also Not Trimmed Trailing White spaces in the code and some random Extra new lines.
pasteme/snippet/views/template.py
Lines 7 to 21 in 4916a92
| class HomeView(TemplateView): | |
| template_name = 'home.html' | |
| def get_context_data(self, **kwargs): | |
| context = super().get_context_data(**kwargs) | |
| context["stats"] = Statistic.objects.last() | |
| return context | |
| class SnippetView(DetailView): | |
| model = Snippet | |
| template_name = 'snippet.html' | |
| context_object_name = 'snippet' |
All together, they make the codebase a little dirty and might make the pycodestyle and even some people 😒 about formatting.
I recommend using the “Black Formatter” in the project!
By using Black, you agree to cede control over minutiae of hand-formatting. In return, Black gives you speed, determinism, and freedom from 😒 faces. You will save time and mental energy for more important matters.
Black makes code review faster by producing the smallest diffs possible. Blackened code looks the same regardless of the project you’re reading. Formatting becomes transparent after a while, and you can focus on the content instead.
This can be achieved by using black locally as formatter on save, and checking the code style by GitHub Actions integration on every push to make sure everything is OK.
I've created an action file that does the job in my 🍴, would be happy to open a PR if you're intrested.
3. The Footer,
IDK why, but I believe all footers need to be sticky, They are called footers anyway 😆. This made me to feel out of comfort-zone and I think it's better that the footer be sticky, So it stocks down there now.
Before:
After:
I've made the footer sticky in my 🍴, would be happy to open a PR if you're intrested.
4. Endpoints Rate Limit,
Pastebin websites are usually tasty 🍰 for new hackers, I'm not a security specialist, but rate-limiting end-points are always a good practice. Django Ratelimit is a rate-limiting decorator for Django views, storing rate data in the configured Django cache backend. I recommend using this package in the project.

