Skip to content

Commit 8afbe61

Browse files
authored
Merge pull request #121 from akashinferno/qr-app
Added QR Generator App
2 parents 72d35d0 + 1917576 commit 8afbe61

File tree

21 files changed

+1549
-0
lines changed

21 files changed

+1549
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Python
2+
*.py[cod]
3+
*$py.class
4+
*.so
5+
.Python
6+
__pycache__/
7+
*.egg-info/
8+
dist/
9+
build/
10+
11+
# Django
12+
*.log
13+
db.sqlite3
14+
db.sqlite3-journal
15+
/media/
16+
/staticfiles/
17+
18+
# Virtual Environment
19+
venv/
20+
env/
21+
ENV/
22+
23+
# IDE
24+
.vscode/
25+
.idea/
26+
*.swp
27+
*.swo
28+
*~
29+
30+
# OS
31+
.DS_Store
32+
Thumbs.db
33+
34+
# QR Codes (temporary storage)
35+
media/qrcodes/*.png
36+
!media/qrcodes/.gitkeep
Lines changed: 355 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,355 @@
1+
# 🎓 Beginner's Guide to Django QR Code Generator
2+
3+
Welcome! This guide will help you understand and run this Django project, even if you're new to web development.
4+
5+
## 📚 What You'll Learn
6+
7+
- How Django projects are structured
8+
- How to set up a Python virtual environment
9+
- How web forms work
10+
- How to generate and serve files in Django
11+
- Basic HTML and CSS for web design
12+
13+
## 🎯 Project Overview
14+
15+
This project is a simple web application that:
16+
1. Takes text or URL input from a user
17+
2. Generates a QR code image
18+
3. Displays the QR code on the web page
19+
4. Allows users to download the QR code
20+
21+
## 📂 Understanding the Project Structure
22+
23+
Let's break down what each file and folder does:
24+
25+
### Root Directory Files
26+
27+
- **`manage.py`**: Django's command-line tool. You'll use this to run the server, migrate the database, etc.
28+
- **`requirements.txt`**: Lists all Python packages needed for this project
29+
- **`README.md`**: Main project documentation
30+
- **`setup.sh`** / **`setup.bat`**: Automated setup scripts for Linux/Mac and Windows
31+
- **`db.sqlite3`**: The database file (created after first migration)
32+
- **`.gitignore`**: Tells git which files to ignore
33+
34+
### Project Configuration (`qrcode_project/`)
35+
36+
This folder contains the main Django project settings:
37+
38+
- **`settings.py`**: All project settings (database, installed apps, static files, etc.)
39+
- **`urls.py`**: Main URL routing - connects web addresses to views
40+
- **`wsgi.py`** / **`asgi.py`**: Server deployment files (you don't need to touch these as a beginner)
41+
42+
### App Directory (`generator/`)
43+
44+
This is where the main application logic lives:
45+
46+
- **`views.py`**: Functions that handle web requests and return responses
47+
- `home()`: Shows the main form
48+
- `generate_qr()`: Creates the QR code
49+
- `download_qr()`: Handles QR code downloads
50+
51+
- **`urls.py`**: URL patterns specific to this app
52+
- `/` → home page
53+
- `/generate/` → QR generation page
54+
- `/download/` → download handler
55+
56+
- **`models.py`**: Database models (empty in this project - we don't store QR codes permanently)
57+
- **`admin.py`**: Admin panel configuration
58+
- **`tests.py`**: Test cases
59+
60+
### Templates (`templates/`)
61+
62+
HTML files that define what users see:
63+
64+
- **`base.html`**: The main layout template (header, footer, common structure)
65+
- **`generator/home.html`**: Home page with the input form
66+
- **`generator/result.html`**: Result page showing the generated QR code
67+
68+
### Static Files (`static/`)
69+
70+
CSS, JavaScript, and image files:
71+
72+
- **`css/style.css`**: All styling for the website (colors, layouts, animations)
73+
74+
### Media Files (`media/`)
75+
76+
User-uploaded or generated files:
77+
78+
- **`qrcodes/`**: Where generated QR codes are temporarily stored
79+
80+
## 🔧 How the Application Works
81+
82+
### 1. User Flow
83+
84+
```
85+
User visits home page (/)
86+
87+
Enters text/URL in form
88+
89+
Submits form to (/generate/)
90+
91+
Django generates QR code
92+
93+
Saves image to /media/qrcodes/
94+
95+
Displays result page with QR code
96+
97+
User can download or create another
98+
```
99+
100+
### 2. Django Request-Response Cycle
101+
102+
```
103+
Browser Request → Django URLs → View Function → Template → HTML Response
104+
```
105+
106+
**Example:**
107+
1. Browser requests: `GET /`
108+
2. Django checks `urls.py` and finds pattern `''` → calls `views.home`
109+
3. `views.home()` renders `home.html`
110+
4. HTML is sent back to browser
111+
112+
### 3. QR Code Generation Process
113+
114+
When you submit the form:
115+
116+
```python
117+
# 1. Get data from form
118+
data = request.POST.get('qr_data')
119+
120+
# 2. Create QR code object
121+
qr = qrcode.QRCode(...)
122+
123+
# 3. Add data to QR code
124+
qr.add_data(data)
125+
qr.make(fit=True)
126+
127+
# 4. Generate image
128+
img = qr.make_image(fill_color="black", back_color="white")
129+
130+
# 5. Save to file
131+
img.save(filepath)
132+
133+
# 6. Return URL to show image
134+
return render(request, 'result.html', {'qr_code_url': url})
135+
```
136+
137+
## 🚀 Getting Started
138+
139+
### Option 1: Use the Setup Script (Easiest)
140+
141+
**On Linux/Mac:**
142+
```bash
143+
chmod +x setup.sh
144+
./setup.sh
145+
```
146+
147+
**On Windows:**
148+
```
149+
setup.bat
150+
```
151+
152+
### Option 2: Manual Setup
153+
154+
**Step 1: Create Virtual Environment**
155+
```bash
156+
python3 -m venv venv
157+
```
158+
159+
**Step 2: Activate Virtual Environment**
160+
161+
*Linux/Mac:*
162+
```bash
163+
source venv/bin/activate
164+
```
165+
166+
*Windows:*
167+
```
168+
venv\Scripts\activate
169+
```
170+
171+
**Step 3: Install Dependencies**
172+
```bash
173+
pip install -r requirements.txt
174+
```
175+
176+
**Step 4: Run Migrations**
177+
```bash
178+
python manage.py migrate
179+
```
180+
181+
**Step 5: Start Server**
182+
```bash
183+
python manage.py runserver
184+
```
185+
186+
**Step 6: Open Browser**
187+
Go to: `http://127.0.0.1:8000/`
188+
189+
## 🎨 Customization Ideas
190+
191+
### 1. Change Colors
192+
193+
Edit `static/css/style.css`:
194+
195+
```css
196+
/* Change background gradient */
197+
body {
198+
background: linear-gradient(135deg, #your-color1 0%, #your-color2 100%);
199+
}
200+
```
201+
202+
### 2. Modify QR Code Appearance
203+
204+
Edit `generator/views.py`:
205+
206+
```python
207+
qr = qrcode.QRCode(
208+
version=1, # Size (1-40, bigger = more data)
209+
error_correction=..., # Error tolerance level
210+
box_size=10, # Pixel size of each box
211+
border=4, # White border size
212+
)
213+
214+
# Change colors
215+
img = qr.make_image(fill_color="blue", back_color="yellow")
216+
```
217+
218+
### 3. Add More Features
219+
220+
Some ideas to extend this project:
221+
- Add different QR code colors
222+
- Allow users to upload logos for QR codes
223+
- Add history of generated QR codes
224+
- Email QR codes to users
225+
- Generate bulk QR codes from CSV file
226+
227+
## 🐛 Common Issues & Solutions
228+
229+
### Issue: "Module not found" error
230+
**Solution:** Make sure you activated the virtual environment and installed requirements:
231+
```bash
232+
source venv/bin/activate # or venv\Scripts\activate on Windows
233+
pip install -r requirements.txt
234+
```
235+
236+
### Issue: "Port already in use"
237+
**Solution:** Either stop the process using port 8000, or run on different port:
238+
```bash
239+
python manage.py runserver 8080
240+
```
241+
242+
### Issue: Static files not loading
243+
**Solution:**
244+
1. Check `STATIC_URL` in settings.py
245+
2. Make sure `{% load static %}` is at top of template
246+
3. Run `python manage.py collectstatic`
247+
248+
### Issue: Generated QR code not displaying
249+
**Solution:**
250+
1. Check that `media/qrcodes/` directory exists
251+
2. Verify `MEDIA_URL` and `MEDIA_ROOT` in settings.py
252+
3. Check file permissions
253+
254+
## 📖 Django Concepts Explained
255+
256+
### What is a Virtual Environment?
257+
258+
A virtual environment is an isolated Python environment where you can install packages without affecting your system Python. Think of it as a separate container for your project's dependencies.
259+
260+
**Why use it?**
261+
- Different projects need different package versions
262+
- Keeps your system Python clean
263+
- Makes project portable
264+
265+
### What is a View?
266+
267+
A view is a Python function that receives a web request and returns a web response. It's the "logic" of your web application.
268+
269+
**Example:**
270+
```python
271+
def home(request):
272+
# This runs when someone visits the home page
273+
return render(request, 'home.html')
274+
```
275+
276+
### What is a Template?
277+
278+
A template is an HTML file that can include Django template language (variables, loops, conditionals). Django processes these and returns plain HTML.
279+
280+
**Example:**
281+
```html
282+
<h1>Welcome, {{ user.name }}!</h1> <!-- Variable -->
283+
{% if user.is_logged_in %} <!-- Conditional -->
284+
<p>You are logged in!</p>
285+
{% endif %}
286+
```
287+
288+
### What is a URL Pattern?
289+
290+
URL patterns map web addresses to view functions.
291+
292+
**Example:**
293+
```python
294+
urlpatterns = [
295+
path('', views.home, name='home'), # / → home view
296+
path('generate/', views.generate_qr, name='generate_qr'), # /generate/ → generate_qr view
297+
]
298+
```
299+
300+
### What is Static vs Media?
301+
302+
- **Static files**: CSS, JS, images that are part of your code (don't change)
303+
- **Media files**: User-uploaded or generated files (change based on user actions)
304+
305+
## 🎓 Learning Resources
306+
307+
### Django Documentation
308+
- Official Docs: https://docs.djangoproject.com/
309+
- Django Tutorial: https://docs.djangoproject.com/en/4.2/intro/tutorial01/
310+
311+
### Python
312+
- Python.org Tutorial: https://docs.python.org/3/tutorial/
313+
- Learn Python: https://www.learnpython.org/
314+
315+
### HTML/CSS
316+
- MDN Web Docs: https://developer.mozilla.org/
317+
- W3Schools: https://www.w3schools.com/
318+
319+
### QR Codes
320+
- qrcode library docs: https://pypi.org/project/qrcode/
321+
322+
## 💡 Next Steps
323+
324+
After getting comfortable with this project:
325+
326+
1. **Add user authentication** - Let users create accounts
327+
2. **Save QR codes to database** - Keep history of generated codes
328+
3. **Add API endpoint** - Let other apps generate QR codes
329+
4. **Deploy to production** - Host on Heroku, PythonAnywhere, or AWS
330+
5. **Add testing** - Write unit tests for your views
331+
332+
## 🤝 Need Help?
333+
334+
- Read error messages carefully - they often tell you what's wrong
335+
- Google the error message
336+
- Check Django documentation
337+
- Ask in Django community forums
338+
- Check Stack Overflow
339+
340+
## 🎉 Congratulations!
341+
342+
You've learned how to run a complete Django web application! This project covers:
343+
- ✅ Django project structure
344+
- ✅ Virtual environments
345+
- ✅ Forms and user input
346+
- ✅ File generation and serving
347+
- ✅ HTML templates
348+
- ✅ CSS styling
349+
- ✅ URL routing
350+
351+
Keep building and learning! 🚀
352+
353+
---
354+
355+
**Remember:** Every expert was once a beginner. Don't be afraid to experiment and break things - that's how you learn!

0 commit comments

Comments
 (0)