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"?>
<project version="4">
<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>
</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" level="application" />
<orderEntry type="library" name="simplemde" level="application" />
<orderEntry type="library" name="js-cookie" level="application" />
</component>
<component name="PyDocumentationSettings">
<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
from blog.models import Topic
from blog.models import Topic, Blogpost, Tag
class TopicFactory(factory.Factory):
@ -9,3 +9,16 @@ class TopicFactory(factory.Factory):
name = factory.Faker("word")
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):
def __str__(self) -> str:
return str(self.title)
created = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=255)
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('manage/addpost', addpost, name='addpost'),
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.shortcuts import render, redirect
from blog.factories import TopicFactory
from blog.models import Topic
from blog.models import Topic, Tag, Blogpost
from markdownblog import settings
@ -15,16 +15,34 @@ def viewblog(request) -> HttpResponse:
@login_required
def order(request):
return None
return render(request, 'blog/order.html')
@login_required
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()}
return render(request, 'blog/addpost.html', context)
def createmocks(request, n) -> HttpResponse:
def createmocks(request, objtype, n) -> HttpResponse:
topics = TopicFactory.create_batch(n)
for topic in topics:

View file

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

View file

@ -2,3 +2,8 @@
border: 1px solid #eaeaea;
border-radius: 5px;
}
#input_title {
font-size: 2.3em;
margin-top: 0.5em;
}

View file

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

View file

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