Mr Duhaz 4 年之前
父節點
當前提交
b20b65188d

+ 0 - 0
blog/__init__.py


二進制
blog/__pycache__/__init__.cpython-310.pyc


二進制
blog/__pycache__/admin.cpython-310.pyc


二進制
blog/__pycache__/apps.cpython-310.pyc


二進制
blog/__pycache__/models.cpython-310.pyc


二進制
blog/__pycache__/urls.cpython-310.pyc


二進制
blog/__pycache__/views.cpython-310.pyc


+ 23 - 0
blog/admin.py

@@ -0,0 +1,23 @@
+from django.contrib import admin
+from blog.models import *
+
+def bt_b_publier(modeladmin, request, queryset):
+	queryset.update(b_publier=True)
+bt_b_publier.short_description = "Passer en Public"
+def bt_b_not_publier(modeladmin, request, queryset):
+	queryset.update(b_publier=False)
+bt_b_not_publier.short_description = "Passer en Priver"
+
+class Blog_Admin(admin.ModelAdmin):
+	form = Blog_Admin_Form
+	list_display = ('b_titre', 'b_titre_slugify', 'b_contenu', 'b_right', 'b_publier')
+	list_filter = ('b_publier','b_cat')
+	filter_horizontal = ('b_cat',)
+	actions = [bt_b_publier, bt_b_not_publier]
+admin.site.register(Blog, Blog_Admin)
+
+class Cat_Blog_Admin(admin.ModelAdmin):
+	pass
+admin.site.register(Cat_Blog, Cat_Blog_Admin)
+
+

+ 6 - 0
blog/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class BlogConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'blog'

+ 32 - 0
blog/migrations/0001_initial.py

@@ -0,0 +1,32 @@
+# Generated by Django 3.2.4 on 2021-11-30 17:20
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Blog',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('b_titre', models.CharField(max_length=128, unique=True, verbose_name='Titre')),
+                ('b_titre_slugify', models.CharField(blank=True, editable=False, max_length=128, verbose_name='Titre Slugify')),
+                ('b_mots_clefs', models.CharField(blank=True, max_length=512, verbose_name='Mots clefs')),
+                ('b_description', models.TextField(blank=True, verbose_name='Description')),
+                ('b_contenu', models.TextField(blank=True, verbose_name='Contenu')),
+                ('b_right', models.TextField(blank=True, verbose_name='Contenu à droite')),
+                ('b_publier', models.BooleanField(default=False, verbose_name='Publié')),
+            ],
+            options={
+                'verbose_name': 'Gestion du Blog',
+                'verbose_name_plural': 'Gestion du Blog',
+                'ordering': ['b_titre_slugify'],
+            },
+        ),
+    ]

+ 26 - 0
blog/migrations/0002_auto_20211130_1818.py

@@ -0,0 +1,26 @@
+# Generated by Django 3.2.4 on 2021-11-30 18:18
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('blog', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Cat_Blog',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('cb_titre', models.CharField(max_length=128, unique=True, verbose_name='Titre')),
+                ('cb_titre_slgify', models.CharField(blank=True, editable=False, max_length=128, verbose_name='Titre Slugify')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='blog',
+            name='b_cat',
+            field=models.ManyToManyField(to='blog.Cat_Blog'),
+        ),
+    ]

+ 22 - 0
blog/migrations/0003_auto_20211130_2005.py

@@ -0,0 +1,22 @@
+# Generated by Django 3.2.4 on 2021-11-30 20:05
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('blog', '0002_auto_20211130_1818'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='cat_blog',
+            options={'verbose_name': 'Catégories', 'verbose_name_plural': 'Catégories'},
+        ),
+        migrations.AlterField(
+            model_name='blog',
+            name='b_cat',
+            field=models.ManyToManyField(related_name='Catégories', related_query_name='Catégories', to='blog.Cat_Blog'),
+        ),
+    ]

+ 18 - 0
blog/migrations/0004_alter_blog_b_cat.py

@@ -0,0 +1,18 @@
+# Generated by Django 3.2.4 on 2021-11-30 20:13
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('blog', '0003_auto_20211130_2005'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='blog',
+            name='b_cat',
+            field=models.ManyToManyField(to='blog.Cat_Blog'),
+        ),
+    ]

+ 0 - 0
blog/migrations/__init__.py


二進制
blog/migrations/__pycache__/0001_initial.cpython-310.pyc


二進制
blog/migrations/__pycache__/0002_auto_20211130_1818.cpython-310.pyc


二進制
blog/migrations/__pycache__/0003_auto_20211130_2005.cpython-310.pyc


二進制
blog/migrations/__pycache__/0004_alter_blog_b_cat.cpython-310.pyc


二進制
blog/migrations/__pycache__/__init__.cpython-310.pyc


+ 57 - 0
blog/models.py

@@ -0,0 +1,57 @@
+from django.db import models
+from django import forms
+
+from django.template.defaultfilters import slugify
+
+from trumbowyg.widgets import TrumbowygWidget
+
+class Cat_Blog(models.Model) :
+	cb_titre = models.CharField("Titre", max_length = 128, unique = True)
+	cb_titre_slgify = models.CharField("Titre Slugify", max_length = 128, blank = True, editable = False)
+
+	class Meta :
+		verbose_name = 'Catégories'
+		verbose_name_plural = 'Catégories'
+
+	def save(self, *args, **kwargs) :
+		self.cb_titre_slugify = slugify(self.cb_titre)
+		super(Cat_Blog, self).save(*args, **kwargs)
+
+	def __unicode__(self):
+		return self.cb_titre
+	def __str__(self):
+		return '%s' % (self.cb_titre)
+
+class Blog(models.Model) : #Architecture pour le blog
+	b_titre = models.CharField("Titre", max_length = 128, unique = True)
+	b_titre_slugify = models.CharField("Titre Slugify", max_length = 128, blank = True, editable = False)
+	b_mots_clefs = models.CharField("Mots clefs", max_length = 512, blank = True)
+	b_cat = models.ManyToManyField(Cat_Blog)
+	b_description = models.TextField("Description", blank = True)
+	b_contenu = models.TextField("Contenu", blank = True)
+	b_right = models.TextField("Contenu à droite", blank = True)
+	b_publier = models.BooleanField("Publié", default = False)
+
+	class Meta :
+		verbose_name = 'Gestion du Blog'
+		verbose_name_plural = 'Gestion du Blog'
+		ordering = ['b_titre_slugify']
+
+	def save(self, *args, **kwargs) :
+		self.b_titre_slugify = slugify(self.b_titre)
+		super(Blog, self).save(*args, **kwargs)
+
+	def __unicode__(self):
+		return self.b_titre
+	def __str__(self):
+		return '%s' % (self.b_titre)
+
+
+class Blog_Admin_Form(forms.ModelForm):
+	class Meta:
+		model = Blog
+		exclude = ['b_titre_slugify']
+		widgets = {
+			'b_contenu': TrumbowygWidget(),
+			'b_right': TrumbowygWidget(),
+			}

+ 3 - 0
blog/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 10 - 0
blog/urls.py

@@ -0,0 +1,10 @@
+from django.urls import path, re_path
+from django.views.generic import RedirectView, TemplateView
+
+from blog import views
+
+urlpatterns = [
+
+	path('', views.blog_index, {'bcat': "all",}, name='blog_index'),
+	#re_path(r'whois/(?P<dom>[a-zA-Z0-9_.,-]+)/$', views.t_ndd_whois, name='t_ndd_whois_with_dom'),
+]

+ 32 - 0
blog/views.py

@@ -0,0 +1,32 @@
+from django.shortcuts import render
+from django.template import loader
+from django.urls import reverse
+from django.http import HttpResponse, HttpResponseRedirect
+from django.contrib import messages
+
+
+from django.contrib.auth import authenticate, login, logout
+from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
+from django.contrib.auth.models import User
+
+#from blog.forms import *
+from core.views import gen_page_base, gen_page_sys
+from blog.models import *
+
+def blog_index(request, bcat):
+
+	template = loader.get_template('page.html')
+	page = gen_page_base()
+	page.p_adresse = reverse('blog_index')
+	page.p_titre = "Bienvenus"
+	page.p_contenu = ""
+	page.p_right = ""
+
+	page.blog_art = Blog.objects.filter( b_publier = True)[:15]
+
+	html = template.render({
+		'page': page,
+		'user': request.user,
+		}, request)
+		
+	return HttpResponse(html)

+ 5 - 6
core/templates/base.html

@@ -7,7 +7,7 @@
 <meta name="keywords" content="{%if page.p_mots_clefs%}{{page.p_mots_clefs}}{% endif %}">
 <meta name="description" content="{% if page.p_description %}{{page.p_description}}{% endif %}">
 {% block add_meta_description %}{% endblock %}
-<title>Tools.Duhaz.fr{% if page.p_meta_title %} | {{page.p_meta_title}}{% elif page.p_titre %} | {{page.p_titre}}{% endif %}</title>
+<title>{% if page.p_meta_title %}{{page.p_meta_title}} | {% elif page.p_titre %}{{page.p_titre}} | {% endif %}M'sieur Duhaz</title>
 <link rel="shortcut icon" href="/static/favicon.ico">
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
 <link href="//fonts.googleapis.com/css2?family=Kufam&display=swap" rel="stylesheet">
@@ -35,7 +35,7 @@
 <header style="color: #fff; font-family: Kufam', cursive;">
 	<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #093554;"> 
 		<div class="container-fluid">
-		<a class="navbar-brand" href="{% url 'core_index' %}"><i class="fas fa-tools"></i> Les Outils de Mr Duhaz </a>
+		<a class="navbar-brand" href="{% url 'core_index' %}"><i class="fas fa-laptop-house"></i> M'sieur Duhaz, le blog </a>
 		<div class="collapse navbar-collapse" id="navbarSupportedContent">
 		{% if page.p_menu_haut %}
 		<ul class="navbar-nav mr-auto">
@@ -51,10 +51,9 @@
 					{% if request.user.is_staff %}
 						<a class="dropdown-item" href="{% url 'admin:index' %}" ><i class="fas fa-cog" ></i> Admin</a>
 					{% endif %}
-					<a class="dropdown-item" href="{% url 'core_logout' %}" ><i class="fas fa-sign-out-alt" ></i> Log out</a>
 				{% else %}
-					<a class="dropdown-item" href="{% url 'core_login' %}?next={{ request.path }}" ><i class="fas fa-sign-in-alt" ></i> Se connecter</a>
-					<a class="dropdown-item" href="{% url 'core_registration' %}?next={{ request.path }}" ><i class="fas fa-edit" ></i> Inscription</a>
+					{% comment %} <a class="dropdown-item" href="{% url 'core_login' %}?next={{ request.path }}" ><i class="fas fa-sign-in-alt" ></i> Se connecter</a>
+					<a class="dropdown-item" href="{% url 'core_registration' %}?next={{ request.path }}" ><i class="fas fa-edit" ></i> Inscription</a> {% endcomment %}
 				{% endif %}
 			</div>
 		</div>
@@ -146,7 +145,7 @@
 </main>
 <footer class="footer mt-auto py-3 text-white" style="background-color: rgba(45, 57, 72, 0.91);">
 	<div class="container">
-		Tools.duhaz.fr - juin.2021
+		Duhaz.fr - dec.2021
 		{% if page.p_menu_pied %}
 		 - 
 		{% for item in page.p_menu_pied %}

二進制
db.sqlite3


二進制
duhaz_blog/__pycache__/settings.cpython-310.pyc


二進制
duhaz_blog/__pycache__/urls.cpython-310.pyc


+ 1 - 0
duhaz_blog/settings.py

@@ -41,6 +41,7 @@ INSTALLED_APPS = [
 	'import_export',
 	'crispy_forms',
 	'core',
+	'blog',
 ]
 
 CRISPY_TEMPLATE_PACK = 'bootstrap4'

+ 2 - 0
duhaz_blog/urls.py

@@ -13,6 +13,8 @@ urlpatterns = [
 
 	path('favicon.ico', RedirectView.as_view(url = '/static/favicon.ico')),
 
+	path('blog', include('blog.urls')),
+
 	path('' , core.index, name='core_index'),
 	# url generique
 	re_path(r'page/(?P<p_url>[a-zA-Z0-9_,-/]+)', core.page, name='core_page'),