前排提示,懒得看的可以先去我博客看看效果噢
用户日志的显示
先是创建一个models
#models.py
class Notebook(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="notebook")
#关联用户
text = models.CharField(max_length=400)
#内容
date = models.DateTimeField(auto_now_add=True)
#创建日期
felling = models.CharField(max_length=200)
#心情
def __str__(self):
return self.text
至于为什么不用TextField,因为我懒得改了。。感觉没啥差别,而且日志的话一般不会很多话的。
创建views
#views.py
from .models import Notebook
@login_required(login_url='/accounts/login/')
def notebook(request,user_id):
user = User.objects.get(id=request.user.id)
if user.id==user_id:
notebooks = Notebook.objects.filter(user_id=user_id).order_by("-date")
context = {'notebooks':notebooks,'user':user}
return render(request,'article/notebook.html',context)
else:
return redirect("article:articles")
这里作了用户限制,非登录用户无法查看,即使登录了,非该日志主人的用户也无法查看该日志。
添加urls
#urls.py
urlpatterns = [
···
path('notebook/<int:user_id>/',views.notebook,name='notebook'),
···
]
记得将模型添加入admin.py,然后迁移模型,在后台添加几条日记试试看,可以的话,我们开始搞前端。
新建一个notebook.html,加入以下代码:
<!--notebook.html--->
{% extends "article/base.html"%}
{% load staticfiles %}
{% load humanize %}
{% block title %}个人日记{% endblock %}
{% block css %}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel="stylesheet" href="{% static 'timeline/style.css' %}">
{% endblock %}
{% block content%}
<div class="container">
<div class="mdui-card mdui-shadow-0">
<div class="mdui-card-header">
<img class="mdui-card-header-avatar animated rollIn" src="{{ user.profile.avatar.url }}"/>
<div class="mdui-card-header-title animated rollIn">{{ user }}</div>
<div class="mdui-card-header-subtitle animated rollIn">{{ user.profile.username }}</div>
</div>
<div class="mdui-card-content"><h1 class="animated rollIn">{{ user.profile.introduce }}</h1></div>
</div>
<hr><br><br>
{% for notebook in notebooks %}
<div class="timeline-item" date-is='{{ notebook.date }}'>
<h1>{{ notebook.felling }}</h1>
<p>
{{ notebook }}
</p>
</div>
{% endfor %}
</div>
{% include "article/header.html" %}
{% endblock %}
这里我使用到了一个timeline的css,具体来源我找不到了,可以自己网上找找关于时间轴的css,很多,找到自己喜欢的套上去用就可以了,具体效果可以在我网站看。
有了日志的显示了,那么用户怎么自己创建一个日记呢?
添加forms
#forms.py
from .models import Notebook
class NotebookForm(ModelForm):
class Meta:
model = Notebook
fields = ['text','felling']
一如既往修改views
#views.py
from .forms import NotebookForm
@login_required(login_url='/accounts/login/')
def notebook_create(request,user_id):
user = User.objects.get(id=request.user.id)
if request.method == 'POST':
notebook_form = NotebookForm(request.POST)
if notebook_form.is_valid():
notebook_form.save(commit=False).user = user
notebook_form.save()
return redirect("article:notebook",user_id=user_id)
else:
return HttpResponse("内容有误,请重新填写!!")
else:
notebook_form = NotebookForm()
context = {'form':notebook_form}
return render(request,'article/notebook_create.html',context)
添加urls
#urls.py
urlpatterns = [
···
path('notebook-create/<int:user_id>/',views.notebook_create,name='notebook_create'),
···
]
接下来就是html了
新建一个notebook_create.html
<!--notebook_create.html-->
{% extends "article/base.html"%}
{% load staticfiles %}
{% load humanize %}
{% block title %}创造你的日常{% endblock %}
{% block content%}
<div class="container">
<form action="#" method="POST">
{% csrf_token %}
<div class="mdui-textfield mdui-textfield-floating-label">
<label class="mdui-textfield-label">用户</label>
<textarea class="mdui-textfield-input" disabled>{{ user }}</textarea>
</div>
<div class="mdui-textfield mdui-textfield-floating-label">
<label class="mdui-textfield-label" for="id_felling">心情</label>
<input class="mdui-textfield-input" type="text" name="felling" maxlength="100" id="id_felling"/>
</div>
<div class="mdui-textfield mdui-textfield-floating-label">
<label class="mdui-textfield-label" for="id_text">内容</label>
<input class="mdui-textfield-input" type="text" name="text" maxlength="600" id="id_text"/>
<div class="mdui-textfield-helper">一次性创作,想好再写</div>
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>
{% include "article/header.html" %}
{% endblock %}
模板写好了,那么我们还需要再修改一下notebook.html,给我们的create添加一个入口,
<!--notebook.html--->
···
<div class="mdui-card-header-subtitle animated rollIn">{{ user.profile.username }}——<a href="{% url 'article:notebook_create' user.id %}">创作你的日记</a></div>
···
最后
记得给你的导航添加notebook的入口,记得是传入user.id作为参数。
看看效果把,至于其他修改,删除的功能就自己完善吧,我觉得作为一个日志的话最好就不要删除修改了,让未来的自己看见傻逼的现在也是一件美好的事情。