diff --git a/articles/migrations/0002_alter_article_title.py b/articles/migrations/0002_alter_article_title.py new file mode 100644 index 0000000..c232bc5 --- /dev/null +++ b/articles/migrations/0002_alter_article_title.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.6 on 2025-10-08 17:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('articles', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='article', + name='title', + field=models.CharField(max_length=200, unique=True), + ), + ] diff --git a/articles/models.py b/articles/models.py index 76dffc5..b69d2e5 100644 --- a/articles/models.py +++ b/articles/models.py @@ -2,7 +2,7 @@ from django.db import models from django.contrib.auth.models import User class Article(models.Model): - title = models.CharField(max_length=200) + title = models.CharField(max_length=200, unique=True) author = models.ForeignKey(User, on_delete=models.CASCADE) text = models.TextField() created_date = models.DateField(auto_now_add=True) diff --git a/articles/static/index.css b/articles/static/index.css index d670d2a..e33614a 100644 --- a/articles/static/index.css +++ b/articles/static/index.css @@ -56,4 +56,18 @@ a { .article-header { margin: 0; +} + +form { + display: flex; + flex-direction: column; + gap: 20px +} + +.submit { + margin: auto; +} + +.text { + min-height: 500px; } \ No newline at end of file diff --git a/articles/templates/archive.html b/articles/templates/archive.html index a0f0a02..c82e5bd 100644 --- a/articles/templates/archive.html +++ b/articles/templates/archive.html @@ -13,6 +13,11 @@

Всё про IT

+ {% block write %} + {% if not user.is_anonymous %} + Написать статью + {% endif %} + {% endblock %}
{% for post in posts %} diff --git a/articles/templates/article_invalid_name.html b/articles/templates/article_invalid_name.html new file mode 100644 index 0000000..2621811 --- /dev/null +++ b/articles/templates/article_invalid_name.html @@ -0,0 +1,21 @@ + + + + + + Новая статья + {% load static %} + + + + +
+ +

Всё про IT

+
+
+

Название сатьи должно быть уникально!

+
+

← Назад к редакированию статьи

+ + \ No newline at end of file diff --git a/articles/templates/new_article.html b/articles/templates/new_article.html new file mode 100644 index 0000000..c701554 --- /dev/null +++ b/articles/templates/new_article.html @@ -0,0 +1,27 @@ + + + + + + Новая статья + {% load static %} + + + + +
+ +

Всё про IT

+
+
+

Написать статью

+
{% csrf_token %} + + + +
+ {{ form.errors }} +
+

← Назад к списку статей

+ + \ No newline at end of file diff --git a/articles/views.py b/articles/views.py index 99eb4ac..2eabd47 100644 --- a/articles/views.py +++ b/articles/views.py @@ -1,6 +1,7 @@ from .models import Article from django.shortcuts import render -from django.http import Http404 +from django.http import Http404, HttpResponse +from django.shortcuts import redirect def archive(request): return render(request, 'archive.html', {"posts": Article.objects.all()}) @@ -8,6 +9,23 @@ def archive(request): def get_article(request, article_id): try: post = Article.objects.get(id=article_id) - return render(request, 'article.html', {"post": post}) + return render(request, 'article.html', {"post": post, "user": request.user}) except Article.DoesNotExist: raise Http404 + +def create_post(request): + if request.method == "POST": + form = { + 'text': request.POST["text"], 'title': request.POST["title"] + } + if form["text"] and form["title"]: + try: + article = Article.objects.create(text=form["text"], title=form["title"], author=request.user) + return redirect('get_article', article_id=article.id) + except: + return render(request, 'article_invalid_name.html') + + if not request.user.is_anonymous: + return render(request, 'new_article.html') + else: + return HttpResponse('Unauthorized', status=401) diff --git a/blog/urls.py b/blog/urls.py index 431f1a5..3c47136 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -22,4 +22,5 @@ urlpatterns = [ path('admin/', admin.site.urls), path('', views.archive), re_path(r'^article/(?P\d+)$', views.get_article, name='get_article'), + path('article/new/', views.create_post), ] diff --git a/db.sqlite3 b/db.sqlite3 index a53e5b9..eda65f2 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/delete.sql b/delete.sql new file mode 100644 index 0000000..caa7943 --- /dev/null +++ b/delete.sql @@ -0,0 +1 @@ +DELETE FROM articles_article WHERE id > 18 \ No newline at end of file