From 4afa528e25d08a1962c8a262bf9cd1ed8a4253e8 Mon Sep 17 00:00:00 2001 From: lzc <3460912341@qq.com> Date: Sun, 12 Oct 2025 19:50:20 +0800 Subject: [PATCH] =?UTF-8?q?Initial=20commit:=20=E8=8A=B1=E5=8D=89=E5=85=BB?= =?UTF-8?q?=E6=AE=96=E5=B9=B3=E5=8F=B0=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 ++ .idea/PythonProject.iml | 10 ++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 ++ .idea/vcs.xml | 8 ++ blog/__init__.py | 0 blog/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 148 bytes blog/__pycache__/admin.cpython-311.pyc | Bin 0 -> 1394 bytes blog/__pycache__/apps.cpython-311.pyc | Bin 0 -> 515 bytes blog/__pycache__/models.cpython-311.pyc | Bin 0 -> 5968 bytes blog/__pycache__/urls.cpython-311.pyc | Bin 0 -> 694 bytes blog/__pycache__/views.cpython-311.pyc | Bin 0 -> 2640 bytes blog/admin.py | 16 +++ blog/apps.py | 6 + blog/migrations/0001_initial.py | 55 ++++++++ ...rcategory_remove_post_category_and_more.py | 101 ++++++++++++++ ...l_alter_flowercategory_options_and_more.py | 50 +++++++ blog/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 3016 bytes ...ove_post_category_and_more.cpython-311.pyc | Bin 0 -> 4624 bytes ...rcategory_options_and_more.cpython-311.pyc | Bin 0 -> 2657 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 159 bytes blog/models.py | 88 ++++++++++++ blog/templates/blog/base.html | 41 ++++++ blog/templates/blog/flower_detail.html | 10 ++ blog/templates/blog/flower_list.html | 34 +++++ blog/templates/blog/home.html | 119 ++++++++++++++++ blog/templates/blog/includes/flower_card.html | 18 +++ blog/templates/blog/includes/footer.html | 10 ++ blog/templates/blog/includes/header.html | 36 +++++ blog/templates/blog/includes/sidebar.html | 46 +++++++ blog/tests.py | 3 + blog/urls.py | 10 ++ blog/views.py | 52 +++++++ db.sqlite3 | Bin 0 -> 196608 bytes djiango | 1 + flower_blog/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 155 bytes .../__pycache__/settings.cpython-311.pyc | Bin 0 -> 2869 bytes flower_blog/__pycache__/urls.cpython-311.pyc | Bin 0 -> 1514 bytes flower_blog/__pycache__/wsgi.cpython-311.pyc | Bin 0 -> 685 bytes flower_blog/asgi.py | 16 +++ flower_blog/settings.py | 129 ++++++++++++++++++ flower_blog/urls.py | 30 ++++ flower_blog/wsgi.py | 16 +++ manage.py | 22 +++ my-project | 1 + 48 files changed, 957 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/PythonProject.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 blog/__init__.py create mode 100644 blog/__pycache__/__init__.cpython-311.pyc create mode 100644 blog/__pycache__/admin.cpython-311.pyc create mode 100644 blog/__pycache__/apps.cpython-311.pyc create mode 100644 blog/__pycache__/models.cpython-311.pyc create mode 100644 blog/__pycache__/urls.cpython-311.pyc create mode 100644 blog/__pycache__/views.cpython-311.pyc create mode 100644 blog/admin.py create mode 100644 blog/apps.py create mode 100644 blog/migrations/0001_initial.py create mode 100644 blog/migrations/0002_flower_flowercategory_remove_post_category_and_more.py create mode 100644 blog/migrations/0003_carousel_alter_flowercategory_options_and_more.py create mode 100644 blog/migrations/__init__.py create mode 100644 blog/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 blog/migrations/__pycache__/0002_flower_flowercategory_remove_post_category_and_more.cpython-311.pyc create mode 100644 blog/migrations/__pycache__/0003_carousel_alter_flowercategory_options_and_more.cpython-311.pyc create mode 100644 blog/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 blog/models.py create mode 100644 blog/templates/blog/base.html create mode 100644 blog/templates/blog/flower_detail.html create mode 100644 blog/templates/blog/flower_list.html create mode 100644 blog/templates/blog/home.html create mode 100644 blog/templates/blog/includes/flower_card.html create mode 100644 blog/templates/blog/includes/footer.html create mode 100644 blog/templates/blog/includes/header.html create mode 100644 blog/templates/blog/includes/sidebar.html create mode 100644 blog/tests.py create mode 100644 blog/urls.py create mode 100644 blog/views.py create mode 100644 db.sqlite3 create mode 160000 djiango create mode 100644 flower_blog/__init__.py create mode 100644 flower_blog/__pycache__/__init__.cpython-311.pyc create mode 100644 flower_blog/__pycache__/settings.cpython-311.pyc create mode 100644 flower_blog/__pycache__/urls.cpython-311.pyc create mode 100644 flower_blog/__pycache__/wsgi.cpython-311.pyc create mode 100644 flower_blog/asgi.py create mode 100644 flower_blog/settings.py create mode 100644 flower_blog/urls.py create mode 100644 flower_blog/wsgi.py create mode 100644 manage.py create mode 160000 my-project diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/PythonProject.iml b/.idea/PythonProject.iml new file mode 100644 index 0000000..25ff418 --- /dev/null +++ b/.idea/PythonProject.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ad62bdc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5f43230 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..69a8c3a --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/__pycache__/__init__.cpython-311.pyc b/blog/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b29d9588cc598da0572cedcf35ef627ae70d54f6 GIT binary patch literal 148 zcmZ3^%ge<81pQgBGeGoX5CH>>P{wCAAY(d13PUi1CZpd+vk_x7w#AUUujV^ z=l5jm3Ilir95{=i#(c(r8{CYIn(3Q0%eQK_Z`T~(VPJq@i#-K_FxT+p2mHIufV;r0 z72q~%xyA09i8}aq+ZqlZiUs(+dl;Pq7#(En`EN!KHTwz!Z+3hwc4!pVZYzwU`qvqI z?-}ksgi7x>BCIfNhrA~1-zXOqOFMVsaaE4E#_-`4;%-XtCRH>U=Q`?!$Vxhe>QCW~EjzRXy zGzcTCtx%`P)#a4%CahPC;pp2kPd3FSsSvVI9b(93TpT}r+q5z6L9YgptNPk$n8n2fOwoN4Xu9hhqUtAAmG&Eb{P ztIj$bX|s_H!(^8?U_Y#$Zx5Z@B*71YO%se`JNh0NhjJEoogHtp;~R!SEc;>gcKgWq pCJBBJ5X*@jeHWOs;(dbhM<}mOuftdy##%7e0sDYm6kyM5_zN&jNE847 literal 0 HcmV?d00001 diff --git a/blog/__pycache__/apps.cpython-311.pyc b/blog/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb05595269d4476c2488ae78e5a9c704b8ae0a89 GIT binary patch literal 515 zcmZuty-UMD6n~ebQu`s=q0qrWoU&vV5usXi5K5ss7y?JyOVgHX67w@tCP4?>eR`1Nh*lGyLdP zAt1pyFzF7MY>_7!;1y3Qy2O+=sJVAxswCd5d)}$*^age}VJjAa$U6fDpQ1B@lQ z%p_f5GUia?!U=cnH2QXz4Nb>(HP+EaF0*)`oeb=H6uM^vi?dkiAhoIH;yk5}IkG5? z3zQ-=;sTc_y@^boc`D56nGp}EiSe|TCJ??CSc=A0`;9}ReRa5t9a`Pc z5Je2r^8(Eq`(i$cQV;|+RFj`IuN};k>b$r!X^7>Q*W9Km$HnX`B9Sj9m!>KSln}QN st@1}{_s9M=nqpwV1*(Ni2${p)?Dt-5NTjlWzv`j(DPF(+aV5pR0eo(LiU0rr literal 0 HcmV?d00001 diff --git a/blog/__pycache__/models.cpython-311.pyc b/blog/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..867d52e07e3ca463088627c3c64b48a5300f281f GIT binary patch literal 5968 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 B=sy4e literal 0 HcmV?d00001 diff --git a/blog/__pycache__/urls.cpython-311.pyc b/blog/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da4644ad7af83b118872a645b46080aa53926a85 GIT binary patch literal 694 zcma)2yKmD#7{7}zi4$WeR9*m2C`cJ-RAuXHickgwm6{-7MT!h}%>%!5c8S_4V+RH{ zGBOpR@&_>TC)kyxMmHfbRVcgxMk-?9^WFJ-{J!7!_^j(y1foxV4Ig8Keo7;k z^0jg)K>3I$qS!$$wlGGtKozIpDwYB|u}A?iOp8nz7xQFV`dU6w5ITjslnkQ+rj&a= zf7X9yJI37mxNg&p@#%^wu7#>lc!!js*$qXm|l@kVf&{h)qI4 zUOWCkAVG${%Ou9LU3R4IJN|_6upzXi)^|o>bhNTG8e1bT+6dn6G=zQ~rYy2Y&hvUz zXmo6Q1Apy+J0X|L;c^RHE>5U+5cFjME@ua3)Y|Cnb-Jxrz1_oT=zF`|AG0@6Pfpa6<=2A4D|O5D>4C#`xB)qG z_HYKzLcti%(Zl%WnWNSC=J}!BovMoxDpsbg<9o;5_ttDbCbfjrQc{}}6}xt1!jpnx}F=;2HosxD2i7O9g-PCNJo116mW@2uq=Jxj&G3g|vlakJ&Ozsq> Kn*8`GH1`|#Q?GIW literal 0 HcmV?d00001 diff --git a/blog/__pycache__/views.cpython-311.pyc b/blog/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe049171e4e97696a77b0606ac42c93bb0cef3c2 GIT binary patch literal 2640 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 literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/0002_flower_flowercategory_remove_post_category_and_more.cpython-311.pyc b/blog/migrations/__pycache__/0002_flower_flowercategory_remove_post_category_and_more.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0fa507e32a07427b7a24e5db80db480075badcc GIT binary patch literal 4624 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 literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/__init__.cpython-311.pyc b/blog/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13694e9e1abbd1300596e984a133d4d0c3d68991 GIT binary patch literal 159 zcmZ3^%ge<81pQgBGeGoX5CH>>P{wCAAY(d13PUi1CZpd&ryk0@&FAkgB{FKt1 dRJ$Tppb;QTiur-W2WCb_#t#fIqKFwN1_1mpC8z)Z literal 0 HcmV?d00001 diff --git a/blog/models.py b/blog/models.py new file mode 100644 index 0000000..f2dbe97 --- /dev/null +++ b/blog/models.py @@ -0,0 +1,88 @@ +from django.db import models +from django.contrib.auth.models import User + + +class FlowerCategory(models.Model): + """花卉分类模型""" + CATEGORY_TYPES = [ + ('indoor', '室内植物'), + ('outdoor', '室外植物'), + ('succulent', '多肉植物'), + ('flowering', '观花植物'), + ('foliage', '观叶植物'), + ('herb', '草本植物'), + ] + + name = models.CharField(max_length=100, verbose_name="分类名称") + category_type = models.CharField(max_length=20, choices=CATEGORY_TYPES, verbose_name="分类类型") + description = models.TextField(blank=True, verbose_name="分类描述") + icon = models.CharField(max_length=50, default='🌿', verbose_name="分类图标") + sort_order = models.IntegerField(default=0, verbose_name="排序") + + class Meta: + verbose_name = "花卉分类" + verbose_name_plural = verbose_name + ordering = ['sort_order', 'name'] + + def __str__(self): + return self.name + + +class Carousel(models.Model): + """轮播图模型""" + title = models.CharField(max_length=200, verbose_name="标题") + subtitle = models.CharField(max_length=200, blank=True, verbose_name="副标题") + image = models.ImageField(upload_to='carousel/', verbose_name="轮播图片") + link = models.CharField(max_length=200, blank=True, verbose_name="链接") + is_active = models.BooleanField(default=True, verbose_name="是否激活") + sort_order = models.IntegerField(default=0, verbose_name="排序") + + class Meta: + verbose_name = "轮播图" + verbose_name_plural = verbose_name + ordering = ['sort_order'] + + def __str__(self): + return self.title + + +class Flower(models.Model): + """花卉信息""" + DIFFICULTY_LEVEL = [ + ('easy', '简单'), + ('medium', '中等'), + ('hard', '困难'), + ] + + name = models.CharField(max_length=200, verbose_name="花卉名称") + scientific_name = models.CharField(max_length=200, verbose_name="学名", blank=True) + category = models.ForeignKey(FlowerCategory, on_delete=models.CASCADE, verbose_name="分类") + description = models.TextField(verbose_name="花卉描述") + cultivation_techniques = models.TextField(verbose_name="养殖技巧") + watering_frequency = models.CharField(max_length=100, verbose_name="浇水频率") + sunlight_requirements = models.CharField(max_length=100, verbose_name="光照需求") + temperature_range = models.CharField(max_length=100, verbose_name="适宜温度") + difficulty = models.CharField(max_length=10, choices=DIFFICULTY_LEVEL, verbose_name="养殖难度") + image = models.ImageField(upload_to='flowers/', verbose_name="花卉图片", blank=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + verbose_name = "花卉信息" + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + + +class CultivationTip(models.Model): + """养殖技巧""" + flower = models.ForeignKey(Flower, on_delete=models.CASCADE, related_name='tips') + title = models.CharField(max_length=200, verbose_name="技巧标题") + content = models.TextField(verbose_name="技巧内容") + author = models.ForeignKey(User, on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + verbose_name = "养殖技巧" + verbose_name_plural = verbose_name \ No newline at end of file diff --git a/blog/templates/blog/base.html b/blog/templates/blog/base.html new file mode 100644 index 0000000..4961683 --- /dev/null +++ b/blog/templates/blog/base.html @@ -0,0 +1,41 @@ + + + + + + + {% block title %}花卉养殖平台{% endblock %} + + + + {% block extra_css %}{% endblock %} + + + {% include 'blog/includes/header.html' %} + +
+ {% block content %}{% endblock %} +
+ + {% include 'blog/includes/footer.html' %} + + + {% block extra_js %}{% endblock %} + + \ No newline at end of file diff --git a/blog/templates/blog/flower_detail.html b/blog/templates/blog/flower_detail.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/blog/templates/blog/flower_detail.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/blog/templates/blog/flower_list.html b/blog/templates/blog/flower_list.html new file mode 100644 index 0000000..ef765ec --- /dev/null +++ b/blog/templates/blog/flower_list.html @@ -0,0 +1,34 @@ +{% extends 'blog/base.html' %} + +{% block title %}花卉图鉴 - 花卉养殖平台{% endblock %} + +{% block content %} +

花卉图鉴

+ +
+ {% for flower in flowers %} +
+ {% include 'blog/includes/flower_card.html' with flower=flower %} +
+ {% endfor %} +
+ + +{% if is_paginated %} + +{% endif %} +{% endblock %} \ No newline at end of file diff --git a/blog/templates/blog/home.html b/blog/templates/blog/home.html new file mode 100644 index 0000000..a41776b --- /dev/null +++ b/blog/templates/blog/home.html @@ -0,0 +1,119 @@ + +{% extends 'blog/base.html' %} +{% load static %} + +{% block extra_css %} + +{% endblock %} + +{% block content %} + +{% if carousel_items %} + +{% endif %} + +
+ +
+ +
+

🌿 花卉分类浏览

+
+ {% for category in categories %} +
+
+
+
{{ category.icon }}
+
{{ category.name }}
+

{{ category.description|default:"各类美丽花卉"|truncatechars:30 }}

+ 浏览品种 +
+
+
+ {% endfor %} +
+
+ + +
+

🌸 最新花卉

+
+ {% for flower in recent_flowers %} +
+
+
+
+ {{ flower.name }} +
+
+
+
{{ flower.name }}
+

{{ flower.description|truncatechars:40 }}

+ + {{ flower.get_difficulty_display }} + +
+
+
+
+
+ {% endfor %} +
+
+
+ + +
+ {% include 'blog/includes/sidebar.html' %} +
+
+{% endblock %} \ No newline at end of file diff --git a/blog/templates/blog/includes/flower_card.html b/blog/templates/blog/includes/flower_card.html new file mode 100644 index 0000000..a8ebe36 --- /dev/null +++ b/blog/templates/blog/includes/flower_card.html @@ -0,0 +1,18 @@ +
+ {% if flower.image %} + {{ flower.name }} + {% endif %} +
+
{{ flower.name }}
+

{{ flower.description|truncatewords:15 }}

+
+ {{ flower.category.name }} + {{ flower.get_difficulty_display }} +
+ 查看养殖方法 → +
+ +
\ No newline at end of file diff --git a/blog/templates/blog/includes/footer.html b/blog/templates/blog/includes/footer.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/blog/templates/blog/includes/footer.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/blog/templates/blog/includes/header.html b/blog/templates/blog/includes/header.html new file mode 100644 index 0000000..3821a89 --- /dev/null +++ b/blog/templates/blog/includes/header.html @@ -0,0 +1,36 @@ + \ No newline at end of file diff --git a/blog/templates/blog/includes/sidebar.html b/blog/templates/blog/includes/sidebar.html new file mode 100644 index 0000000..9705519 --- /dev/null +++ b/blog/templates/blog/includes/sidebar.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tests.py b/blog/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/blog/urls.py b/blog/urls.py new file mode 100644 index 0000000..2c951a6 --- /dev/null +++ b/blog/urls.py @@ -0,0 +1,10 @@ +from django.urls import path +from . import views + +app_name = 'blog' + +urlpatterns = [ + path('', views.home, name='home'), + path('flowers/', views.FlowerListView.as_view(), name='flower_list'), + path('flower//', views.FlowerDetailView.as_view(), name='flower_detail'), +] \ No newline at end of file diff --git a/blog/views.py b/blog/views.py new file mode 100644 index 0000000..0f5add7 --- /dev/null +++ b/blog/views.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, get_object_or_404 +from django.views.generic import ListView, DetailView +from .models import Flower, FlowerCategory,Carousel, CultivationTip + + +class FlowerListView(ListView): + """花卉列表页""" + model = Flower + template_name = 'blog/flower_list.html' + context_object_name = 'flowers' + paginate_by = 12 + + def get_queryset(self): + return Flower.objects.all().order_by('-created_at') + + +class FlowerDetailView(DetailView): + """花卉详情页""" + model = Flower + template_name = 'blog/flower_detail.html' + context_object_name = 'flower' + + +def home(request): + # 获取轮播图数据 + carousel_items = Carousel.objects.filter(is_active=True).order_by('sort_order')[:5] + + # 获取分类数据 + categories = FlowerCategory.objects.all() + + # 获取最新花卉 + recent_flowers = Flower.objects.all().order_by('-created_at')[:6] + + # 按分类获取热门花卉 + featured_flowers = {} + for category in categories[:4]: # 只取前4个分类 + flowers = Flower.objects.filter(category=category)[:3] + if flowers: + featured_flowers[category.name] = flowers + + context = { + 'carousel_items': carousel_items, + 'categories': categories, + 'recent_flowers': recent_flowers, + 'featured_flowers': featured_flowers, + } + return render(request, 'blog/home.html', context) + + +from django.shortcuts import render + +# Create your views here. diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..b7ab9669efceedd914172d3b11a9d8176c072279 GIT binary patch literal 196608 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 literal 0 HcmV?d00001 diff --git a/djiango b/djiango new file mode 160000 index 0000000..5b7cd67 --- /dev/null +++ b/djiango @@ -0,0 +1 @@ +Subproject commit 5b7cd67489f56f83b8b880b078a311a0c0188a0a diff --git a/flower_blog/__init__.py b/flower_blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/flower_blog/__pycache__/__init__.cpython-311.pyc b/flower_blog/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bb8fe54a2b5fb78210b34ade699747a6d814cc0 GIT binary patch literal 155 zcmZ3^%ge<81bSJoGeGoX5CH>>P{wCAAY(d13PUi1CZpd&ryk0@&FAkgB{FKt1RJ$Tp ZpmvZ2#r#0x12ZEd;|B&9QN#=s0{{jsBbWdH literal 0 HcmV?d00001 diff --git a/flower_blog/__pycache__/settings.cpython-311.pyc b/flower_blog/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8fa599957488049674184561273d752e2e51c596 GIT binary patch literal 2869 zcmb6bU2ogg^-|xWJ}fJ8qI?a^vMo^?Q%#$XHfYn*672|;CC!xLl`ue1y4Nxtij+wz zp7}6nduoRQD~18>Lmz@ZWG(s+_A8trzzjYa*i+FL0)6Y#4k^jzlmPQ+^4xRJ_c`~R zEB`%{p%FZP_|uO&|HvTpZ*MbuVpHU&E``vS2qO_;3Wro`5E4Ta3Lz3A;pf2n9=^%* zEHcA_>vPzAe?r)e&d^g#jNz~t#}P5nM`E&%aP%8Wq+yN0n!<50je&zB*yGXPPzr@p zUq||sn89f=i!(S&VtBz$A%t^ZhZIU&z>7E!Qj7SU4+}nAQmB4J%;EFmBEBHz!QVOf z3XoM%T@sh@Me#gY+PyG~?^$t%1y}HN>3Ik;f^YIb92fCr@zR-eul%>Jco|<6ui&D9 zO23fbfZ*F585;U7=~*mIuMv$HvPCe{Jz#EN zUvF8)14Uy@OE#>j`s+U7nb?b_laQQdLG(OpDRCPm_{0 z433CmFi&N5M9lxkmqE4zj(+gYphP*5mTc|VE7K|{nn`*igDn4AF@N>euJysSYdg!z zeRBQo6Yc5#n;#AKOzHNW?*8q)z3ca+1B)2l?!BAach%*0+oiY@@hWW>CdSyFu33iC zW&P6H=jN#+@OycV=&2CRvJQsCv@gstO=6l*>{l5BV90&YxHPX}!SVFGLorKndwI$o zC>X0`Up5HqXRBBTtl*^$$odJ-zB6xZ>Yfeg3lmyEtMsZ9IPZb3u@!&$AEKtQ%~k+B zR>*!p^!{8dG88Wu2M2qoo6_^!F`zh~#H>_7<@HJV0$TT8lZ2}Dp6trKComH1?^X?Y zK$=6Z_sxJ_E--NH$WTqYJhfzz!BB;nW4mC2Xm~agY}FsX_LOZpdA|jIZ%HsMJqS!U z%u>X@IdA4wDHfCNsBgb<21$eL!R%P}n^W17M)j)t8p~d_?RVycPb&Eug&D6DapEgn z!i1F_q2xQ zo~l^n9h(N?6fcFG7~fc{HFzh|;MRE~4RdZknhW0VpP_7;`?`T8xJwl5yJI^hF*wT` z+mS^CWuU0CHx`d461rhOJgcR3MNRNl21+`*?JNn7aCuII$sIJeuVsRycw8TEU?O zzOuo$rH}bfoM@F_>8v>!u3m3$@>S_kQ)mlLw$>2ZKmr2vkKoYjwQ9A_Z*m*Flip}H z+frwvUTHQ~on)I|Z`HXrFF3hPVXfxL*J~BdYc(fX<=UL*R&a`3r~OE3ae}bf+^9;A zxq1zlP3X`}oolRhxHVp?G^;!qtgZ8s*o1ycbRgi`?ROha%){EE6VgqHz75tZUIb3W zOWuj>>Wb#%CiK->ofjq@pIqmwHO?2LC#V;?ldtltT&LcaAf%?WTI1{0@6b=)&(qIr z^}&|V?o>b7Y8_ZRy4ITfhHnKXW^4A_$qo;GPP`ANGg8Szg9UZ(-z)Qv0NpS}QErH) zA};bk5m6TpQ8DGls-5w|0EXrevw~)wsged^&0?PezoOTnaz*9%L{86EJoMv1Uy`Bw#aJ)df z$#gX4A`gVKnb0`tGN|zOAAn1W`)EB&jk_(49(G7<{ zIpJ?w!Od@jn~lk4DRU(R`MbYCi^Xx~IK4Pd9;X(@iDO7Ec8ro^|IejS_QIGxDxCk@ z+L!ge)}Ix>{oqC6y_bde4$nP+*pAan|VX NA<9o);}#sne*hO{pcViC literal 0 HcmV?d00001 diff --git a/flower_blog/__pycache__/urls.cpython-311.pyc b/flower_blog/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a4eaf8793b837c27f4af122eaa5872c5c88cea4 GIT binary patch literal 1514 zcmb7EO^@3|7#=%zKAfbBs00=2VYU^@x>{^esg;OIQ6XEp;$ze8t}4Pxt~Z_}j%<%L zGhx|1tq_Mj?x7O=f+7SzfS-|-a)^B8gt$bMQ%}6(kCLDw!DKvo^UnM6JkN~%L$hfh z7`sQmkKWS|`c?iZMkP0%{{hB#$U{BkDV`cAq1sawX_tahsP(keUiNF5Kh%4Ax~B)_ zu+pofb~&hqwO&m@Dk7R!A?i3qAbXALc}Mh2Md&AZvXMqsVb#6bGX-|w$;N8jQ0+BH zW!x-w*;UejtQz<(6+W=n3j1ecHU9)MdkwGt2+7B6xZeN-V}JKk+^5mNA5NGnd>Y{a zWq1(KBf^}+fDUoY=$Q0{Wf*%Sf}c!S5W7MU7V#%I@VUT@P6Xi?Dse0*{>mpu+`{*v zOh_5QegqZ6tacm_mlMnhX&V^ENQjuXZQG-LZh2!j8q%U&pN2Mx>|54NThQ3=b6W=6 z(4O1I*4J(bwRqdOKZ*J&?6hrK^j!uD)qahBD9XF11X9hEkznRBN z29m%MLr4X(qm5Q;Gv_s;A=$){8=Zpuq9SSh8W_K`v!GlPfz8 zOA20q%wsoGQT{Vpd5dfiu;|p1jzZneKnOtcfHV$z|f@Prpn-jMM))30)Leg zA%GJHyUYb#sQyVgO|lboQhQkxwwrLDCLxK0!zdM>o3AAm#{r+?B$skppoU=nAuGu) z^(C%pU#2g+rE;t+J#YS{2#x8M2VpnEJvH0oyW-NDkkcpyt#@$rl5osfEyfZSzQ zAXR=a_@A&WN{XT^)HOw0Ah}?qtWObMo^y0{x;p2p0T4V#Z%LjP%-R z=j_V)t*7m$A6#hHXWI3-Rt4AVXOGVwpMQDLT%R@9FSKhj?b<>wt*NK=g@Lrjw|5sv wQ64IDZSDN_`R(sFW^Zl&@?dsnXL`ANak)E#RqLL9B7c(SLnRAmZvgSX08UT32mk;8 literal 0 HcmV?d00001 diff --git a/flower_blog/__pycache__/wsgi.cpython-311.pyc b/flower_blog/__pycache__/wsgi.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac97dc95e0b509c982f49b96f9b811b19e5392c5 GIT binary patch literal 685 zcmY*X&uiN-6n?VPW^>mtM%%L}y<}|mR@kMCLLsfm*wR8$wuOM>T8ix;OU6=@rKcYD zKkT@jI!6DQbQA{OC9u=jCD2<>lbZ#yC+X?O)BC3N+jQ$V5WE+MxF<5)V`4}%?}UjErv!?o zMiu32Ayr;+<}Jv`H)^l;8t$Rj+;6q&4Y%pNIjkMO-alJgsDLf0QZWx@wVandPs{MU z+z>KCOUor+~H7(e1sLv)b-v6`iVo4#;=fO-+Q*)F`9U6bknUkad2)XcKro{=ZMa q_-Orr_3yAg-mu5d4z9qx26qhZq_R1#Y+hBit}9#TD@Ds5Xz;%%&B@3B literal 0 HcmV?d00001 diff --git a/flower_blog/asgi.py b/flower_blog/asgi.py new file mode 100644 index 0000000..192beec --- /dev/null +++ b/flower_blog/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for flower_blog project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'flower_blog.settings') + +application = get_asgi_application() diff --git a/flower_blog/settings.py b/flower_blog/settings.py new file mode 100644 index 0000000..a70310d --- /dev/null +++ b/flower_blog/settings.py @@ -0,0 +1,129 @@ +""" +Django settings for flower_blog project. + +Generated by 'django-admin startproject' using Django 5.2.7. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.2/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-%is$0jt=!!h-i7e#5knvw+@mqs_14bw1qq#6_yterbb6(f5l-8' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'blog', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'flower_blog.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'flower_blog.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + +import os + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.2/howto/static-files/ + +STATIC_URL = 'static/' +STATICFILES_DIRS = [os.path.join(BASE_DIR, 'blog/static')] + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') + +# Default primary key field type +# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/flower_blog/urls.py b/flower_blog/urls.py new file mode 100644 index 0000000..0189f3b --- /dev/null +++ b/flower_blog/urls.py @@ -0,0 +1,30 @@ +""" +URL configuration for flower_blog project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path +from django.contrib import admin +from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('blog.urls')), +] + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/flower_blog/wsgi.py b/flower_blog/wsgi.py new file mode 100644 index 0000000..83110a8 --- /dev/null +++ b/flower_blog/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for flower_blog project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'flower_blog.settings') + +application = get_wsgi_application() diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..52a96f4 --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'flower_blog.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/my-project b/my-project new file mode 160000 index 0000000..fbc201d --- /dev/null +++ b/my-project @@ -0,0 +1 @@ +Subproject commit fbc201dcbbb6029c78295ecc656ae484794ef960