Python新手使用的Django架站的16堂课 — 第八章(二)
要求
django-admin startproject ch0813www
过程
建立工程
django-admin startproject ch08tst
cd ch08tst/
python manage.py startapp mysite
cd ch08tst/
vi settings.py
修改:mysite / models.py
from django.db import models
# Create your models here.
class Mood(models.Model):
status = models.CharField(max_length=10, null = False)
def __unicode__(self):
return self.status
class Post(models.Model):
mood = models.ForeignKey('Mood', on_delete=models.CASCADE)
nickname = models.CharField(max_length=10, default='不愿意透漏身份的人')
message = models.TextField(null=False)
del_pass = models.CharField(max_length=10)
pub_time=models.DateTimeField(auto_now=True)
enabled=models.BooleanField(default=False)
def __unicode__(self):
return self.message
修改: mysite / admin.py
from django.contrib import admin
# Register your models here.
from mysite import models
class PostAdmin(admin.ModelAdmin):
list_display=('nickname', 'message', 'enabled', 'pub_time')
ordering = ('-pub_time',)
admin.site.register(models.Mood)
admin.site.register(models.Post, PostAdmin)
初始化
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver 192.168.99.218:8080
http://192.168.99.218:8080/admin
添加心情
生气 开心 感恩 快乐 后悔 哀伤 兴奋 挑战 犹豫
从 第7章的源码中 复制 templates 目录和 static 目录
修改 mysite / views.py
#encoding:utf-8
from django.shortcuts import render
# Create your views here.
from django.template.loader import get_template
from django.http import HttpResponse
from mysite import models
def index(request):
template = get_template('index.html')
posts = models.Post.objects.filter(enabled=True).order_by('-pub_time')[:30]
moods = models.Mood.objects.all()
html = template.render(locals())
return HttpResponse(html)
修改 templates / index.html
<!-- index.html (ch08www project) -->
{% extends "base.html" %}
{% block title %}我有话要说{% endblock %}
{% block content %}
<div class='container'>
<form name='my form' action='/' method='GET'>
现在的心情:<br/>
{% for m in moods %}
<input type='radio' name='mood' value='{{ m.status }}'>{{ m.status }}
{% endfor %}
<br/>
心情留言板:<br/>
<textarea name='user_post' rows=3 cols=70></textarea><br/>
<label for='user_id'>你的昵称:</label>
<input id='user_id' type='text' name='user_id'>
<label for='user_pass'>张贴/删除密码:</label>
<input id='user_pass' type='password' name='user_pass'><br/>
<input type='submit' value='张贴'>
<input type='reset' value='清除重填'>
</form>
<div class='row'>
<div class='col-md-12'>
<div class='panel panel-default'>
<div class='panel-heading' align=center>
<h3>~~宝宝心里苦,宝宝只在这里说~~</h3>
</div>
</div>
{% for p in posts %}
{% cycle "<div class='row'> <div class='col-md-4'>" "<div class='col-md-4'>" "<div class='col-md-4'>" %}
<div class='panel panel-primary'>
<div class='panel-heading'>【{{ p.nickname }}】觉得{{ p.mood }}</div>
<div class='panel-body'>{{ p.message | linebreaks }}</div>
<div class='panel-footer' align='right'>
<i><small>{{ p.pub_time }}</small></i>
<span class="glyphicon glyphicon-trash" onclick='go_delete({{p.id}})'></span>
</div>
</div>
</div>
{% cycle "" "" "</div>"%}
{% endfor %}
</div>
{% endblock %}
修改 ch08tst / urls.py
from django.conf.urls import include, url
from django.contrib import admin
from mysite import views
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', views.index),
]
浏览器查看
http://192.168.99.218:8080/
修改 mysite / views.py
#encoding:utf-8
from django.shortcuts import render
# Create your views here.
from django.template.loader import get_template
from django.http import HttpResponse
from mysite import models
def index(request):
template = get_template('index.html')
posts = models.Post.objects.filter(enabled=True).order_by('-pub_time')[:30]
moods = models.Mood.objects.all()
try:
user_id = request.GET['user_id']
user_pass = request.GET['user_pass']
user_post = request.GET['user_post']
user_mood = request.GET['mood']
except:
user_id = None
message = '如果要张贴信息,那么每一个字段都要填...'
if user_id != None :
mood = models.Mood.objects.get(status=user_mood)
post = models.Post.objects.create(mood=mood,
nickname=user_id,
del_pass=user_pass,
message=user_post)
post.save()
message= '成功存储!请记得您的编辑密码[{}]!,信息须审查后才会显示.'.format(user_pass)
html = template.render(locals())
return HttpResponse(html)
header.html
<!-- header.html (ch07www project) -->
<nav class='navbar navbar-default'>
<div class='container-fluid'>
<div class='navbar-header'>
<div class='navbar-brand' align=center>
不吐不快
</div>
</div>
<ul class='nav navbar-nav'>
<li class='active'><a href='/'>Home</a></li>
<li><a href='/admin'>后台管理</a></li>
</ul>
</div>
</nav>
index.html
<!-- index.html (ch08www project) -->
{% extends "base.html" %}
{% block title %}我有话要说{% endblock %}
{% block content %}
<div class='container'>
{% if message %}
<div class='alert alert-warning'>{{ message }}</div>
{% endif %}
<form name='my form' action='/' method='GET'>
现在的心情:<br/>
{% for m in moods %}
<input type='radio' name='mood' value='{{ m.status }}'>{{ m.status }}
{% endfor %}
<br/>
心情留言板:<br/>
<textarea name='user_post' rows=3 cols=70></textarea><br/>
<label for='user_id'>你的昵称:</label>
<input id='user_id' type='text' name='user_id'>
<label for='user_pass'>张贴/删除密码:</label>
<input id='user_pass' type='password' name='user_pass'><br/>
<input type='submit' value='张贴'>
<input type='reset' value='清除重填'>
</form>
<div class='row'>
<div class='col-md-12'>
<div class='panel panel-default'>
<div class='panel-heading' align=center>
<h3>~~宝宝心里苦,宝宝只在这里说~~</h3>
</div>
</div>
{% for p in posts %}
{% cycle "<div class='row'> <div class='col-md-4'>" "<div class='col-md-4'>" "<div class='col-md-4'>" %}
<div class='panel panel-primary'>
<div class='panel-heading'>【{{ p.nickname }}】觉得{{ p.mood }}</div>
<div class='panel-body'>{{ p.message | linebreaks }}</div>
<div class='panel-footer' align='right'>
<i><small>{{ p.pub_time }}</small></i>
<span class="glyphicon glyphicon-trash" onclick='go_delete({{p.id}})'></span>
</div>
</div>
</div>
{% cycle "" "" "</div>"%}
{% endfor %}
</div>
{% endblock %}
page229
加上删除帖文的功能
这个功能不知道为啥不行
在IE中看不到 垃圾桶 符号,在chrome中可以看到,但是不能点击.
应该是浏览器设置的问题.
<script>
function go_delete(id){
var user_pass = document.getElementById('user_pass').value;
if (user_pass != "") {
var usr = '/' + id + '/' + user_pass;
window.location = usr;
}
}
</script>
<span class="glyphicon glyphicon-trash" onclick='go_delete({{p.id}})'></span>
page 231
django 练习 源码工程
https://download.csdn.net/download/wowocpp/11754869