began adding addpost function

This commit is contained in:
CDaut 2022-06-02 08:29:52 +02:00 committed by CDaut
parent 81c455f014
commit c50d047233
15 changed files with 106 additions and 21 deletions

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="JavaScriptLibraryMappings"> <component name="JavaScriptLibraryMappings">
<file url="file://$PROJECT_DIR$" libraries="{jquery-3.6.0, jquery-3.6.0.slim, simplemde}" /> <file url="file://$PROJECT_DIR$" libraries="{jquery-3.6.0, jquery-3.6.0.slim, js-cookie, simplemde}" />
</component> </component>
</project> </project>

1
.idea/mdblog.iml generated
View file

@ -23,6 +23,7 @@
<orderEntry type="library" name="jquery-3.6.0.slim" level="application" /> <orderEntry type="library" name="jquery-3.6.0.slim" level="application" />
<orderEntry type="library" name="jquery-3.6.0" level="application" /> <orderEntry type="library" name="jquery-3.6.0" level="application" />
<orderEntry type="library" name="simplemde" level="application" /> <orderEntry type="library" name="simplemde" level="application" />
<orderEntry type="library" name="js-cookie" level="application" />
</component> </component>
<component name="PyDocumentationSettings"> <component name="PyDocumentationSettings">
<option name="format" value="PLAIN" /> <option name="format" value="PLAIN" />

6
.idea/sqldialects.xml generated
View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/markdownblog/db_scripts/init_user_db.sql" dialect="PostgreSQL" />
</component>
</project>

View file

@ -1,6 +1,6 @@
import factory import factory
from blog.models import Topic from blog.models import Topic, Blogpost, Tag
class TopicFactory(factory.Factory): class TopicFactory(factory.Factory):
@ -9,3 +9,16 @@ class TopicFactory(factory.Factory):
name = factory.Faker("word") name = factory.Faker("word")
numbered = False numbered = False
class PostFactory(factory.Factory):
class Meta:
model = Blogpost
title = factory.Faker("word")
tags = Tag.objects.all()[0] if len(Tag.objects.all()) != 0 else None
if len(Topic.objects.all()) == 0:
TopicFactory.create_batch(10)
topics = Topic.objects.all()[0]
mdfile = "/tmp/test.md"

View file

@ -0,0 +1,19 @@
# Generated by Django 4.0.5 on 2022-06-01 19:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('blog', '0002_alter_blogpost_topics_alter_topic_roottopic'),
]
operations = [
migrations.AddField(
model_name='blogpost',
name='mdfile',
field=models.CharField(default='/tmp/test.md', max_length=255),
preserve_default=False,
),
]

View file

@ -0,0 +1,18 @@
# Generated by Django 4.0.5 on 2022-06-01 19:19
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('blog', '0003_blogpost_mdfile'),
]
operations = [
migrations.RenameField(
model_name='blogpost',
old_name='topics',
new_name='topic',
),
]

View file

@ -16,8 +16,13 @@ class Topic(models.Model):
class Blogpost(models.Model): class Blogpost(models.Model):
def __str__(self) -> str:
return str(self.title)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True) last_modified = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag) tags = models.ManyToManyField(Tag)
topics = models.ForeignKey(Topic, blank=True, null=True, on_delete=models.CASCADE) topic = models.ForeignKey(Topic, blank=True, null=True, on_delete=models.CASCADE)
mdfile = models.CharField(max_length=255)

View file

@ -5,5 +5,5 @@ urlpatterns = [
path('', viewblog, name="index"), path('', viewblog, name="index"),
path('manage/addpost', addpost, name='addpost'), path('manage/addpost', addpost, name='addpost'),
path('manage/order', order, name='order'), path('manage/order', order, name='order'),
path('mock/topic/<int:n>/', createmocks, name='mock'), path('mock/<str:object>/<int:n>/', createmocks, name='mock'),
] ]

View file

@ -4,7 +4,7 @@ from django.contrib.auth.decorators import login_required
from django.http import HttpResponse from django.http import HttpResponse
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from blog.factories import TopicFactory from blog.factories import TopicFactory
from blog.models import Topic from blog.models import Topic, Tag, Blogpost
from markdownblog import settings from markdownblog import settings
@ -15,16 +15,34 @@ def viewblog(request) -> HttpResponse:
@login_required @login_required
def order(request): def order(request):
return None return render(request, 'blog/order.html')
@login_required @login_required
def addpost(request) -> HttpResponse: def addpost(request) -> HttpResponse:
if request.method == 'POST':
title = request.POST['title']
markdown = request.POST['markdown']
tags = []
if 'tags' in request.POST and request.POST['tags'] != '':
tags_str = request.POST['tags'].split(" ")
for tag in tags_str:
tags.append(Tag.objects.filter(name=tag)[0])
topicstr = request.POST['topic']
topics = None if topicstr == "No topic" else Topic.objects.filter(name=topicstr)[0]
new_post = Blogpost.objects.create(title=title, topics=topics)
new_post.tags.set(tags)
context = {'alltopics': Topic.objects.all().order_by('name').values()} context = {'alltopics': Topic.objects.all().order_by('name').values()}
return render(request, 'blog/addpost.html', context) return render(request, 'blog/addpost.html', context)
def createmocks(request, n) -> HttpResponse: def createmocks(request, objtype, n) -> HttpResponse:
topics = TopicFactory.create_batch(n) topics = TopicFactory.create_batch(n)
for topic in topics: for topic in topics:

View file

@ -126,3 +126,5 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
LOGIN_REDIRECT_URL = "/" LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/" LOGOUT_REDIRECT_URL = "/"
CSRF_HEADER_NAME = "X-CSRFToken"

View file

@ -1,4 +1,9 @@
.posttitle { .posttitle {
border: 1px solid #eaeaea; border: 1px solid #eaeaea;
border-radius: 5px; border-radius: 5px;
}
#input_title {
font-size: 2.3em;
margin-top: 0.5em;
} }

View file

@ -4,7 +4,6 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title> <title>{% block title %}{% endblock %}</title>
<!-- Compiled and minified CSS -->
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"
media="screen,projection"/> media="screen,projection"/>
@ -24,7 +23,7 @@
<ul id="slide-out" class="sidenav sidenav-fixed"> <ul id="slide-out" class="sidenav sidenav-fixed">
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li><a class="waves-effect" href="{% url 'addpost' %}"><i class="material-icons">add</i>New post</a></li> <li><a class="waves-effect" href="{% url 'addpost' %}"><i class="material-icons">add</i>New post</a></li>
<li><a class="waves-effect" href="{% url 'addpost' %}"><i class="material-icons">reorder</i>Manage posts</a> <li><a class="waves-effect" href="{% url 'order' %}"><i class="material-icons">reorder</i>Manage posts</a>
</li> </li>
<li> <li>
<div class="divider"></div> <div class="divider"></div>

View file

@ -1,7 +1,7 @@
{% extends 'base/base.html' %} {% extends 'base/base.html' %}
{% load static %} {% load static %}
{% block title %} {% block title %}
Neuer Post New Post
{% endblock %} {% endblock %}
{% block includehere %} {% block includehere %}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
@ -9,20 +9,20 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="col s12"> <div class="col s12">
<form method="post" action="{% url 'addpost' %}"> <form action="{% url 'addpost' %}" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
<h3 contenteditable="true" class="posttitle">Titel</h3> <input name="title" type="text" class="posttitle" id="input_title" value="Title">
<textarea> <textarea name="markdown" id="mde">
</textarea> </textarea>
<div class="row"> <div class="row">
<div class="col s6"> <div class="col s6">
<label> <label>
Tags Tags
<input type="text"> <input type="text" id="input_tags" name="tags">
</label> </label>
</div> </div>
<div class="input-field col s6"> <div class="input-field col s6">
<select> <select name="topic" id="topic_select">
<option selected>No topic</option> <option selected>No topic</option>
{% for topic in alltopics %} {% for topic in alltopics %}
<option value="{{ topic.id }}">{{ topic.name }}</option> <option value="{{ topic.id }}">{{ topic.name }}</option>
@ -102,6 +102,8 @@
} }
] ]
}); });
$("#mde").data({editor: simplemde});
</script> </script>
<script> <script>

View file

@ -0,0 +1,9 @@
{% extends 'base/base.html' %}
{% load static %}
{% block title %}
Order Topics
{% endblock %}
{% block includehere %}
{% endblock %}
{% block content %}
{% endblock %}