Python新手使用的Django架站的16堂课 — 第八章(三)
page 232
8.2 基础窗体类的应用
遇到问题
Django simple Captcha “No module named fields” error
I encountered same problem before and I installed django-simple-captcha. It worked finally
https://stackoverflow.com/questions/5895296/django-simple-captcha-no-module-named-fields-error
pip install django-simple-captcha
page232
cp -r ch0813www ch0821www
cd ch0821www
(venv_py2) jack@jack-desktop:~/course/chapt8/ch0821www$
(venv_py2) jack@jack-desktop:~/course/chapt8/ch0821www$ grep -r 'ch0813www'
manage.py: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ch0813www.settings")
Binary file mysite/migrations/0001_initial.pyc matches
Binary file mysite/migrations/__init__.pyc matches
Binary file mysite/views.pyc matches
Binary file mysite/__init__.pyc matches
Binary file mysite/models.pyc matches
Binary file mysite/admin.pyc matches
ch0813www/urls.py:"""ch0813www URL Configuration
ch0813www/wsgi.py:WSGI config for ch0813www project.
ch0813www/wsgi.py:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ch0813www.settings")
ch0813www/settings.py:Django settings for ch0813www project.
ch0813www/settings.py:ROOT_URLCONF = 'ch0813www.urls'
ch0813www/settings.py:WSGI_APPLICATION = 'ch0813www.wsgi.application'
Binary file ch0813www/urls.pyc matches
Binary file ch0813www/__init__.pyc matches
Binary file ch0813www/wsgi.pyc matches
Binary file ch0813www/settings.pyc matches
(venv_py2) jack@jack-desktop:~/course/chapt8/ch0821www$
修改完之后,
python manage.py runserver 192.168.99.218:8080
http://192.168.99.218:8080/admin
可以使用
修改 ch0821www / urls.py
"""ch0821www URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.8/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import include, url
from django.contrib import admin
from mysite import views
urlpatterns = [
url(r'^$', views.index),
url(r'^(\d+)/(\w+)/$', views.index),
url(r'^list/$',views.listing),
url(r'^post/$',views.posting),
url(r'^admin/', include(admin.site.urls)),
]
修改 header.html
<!-- header.html (ch08www 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='/list'>浏览信息</a></li>
<li><a href='/post'>张贴信息(仅窗体)</a></li>
<li><a href='/post2db'>张贴信息</a></li>
<li><a href='/contact'>联络管理员</a></li>
<li><a href='/admin'>后台管理</a></li>
</ul>
</div>
</nav>
修改 views.py
#encoding:utf-8
from django.shortcuts import render
# _*_ encoding:utf-8 _*_
from django.core.mail import EmailMessage
from django.template import RequestContext
from django.template import Context, Template
from django.template.loader import get_template
from django.http import HttpResponse, HttpResponseRedirect
from mysite import models
def index(request,pid=None,del_pass=None):
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 del_pass and pid:
try:
post = models.Post.objects.get(id=pid)
except:
post = None
if post:
if post.del_pass == del_pass:
post.delete()
message = "数据删除成功"
else:
message = "密码错误"
elif 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)
def listing(request):
template = get_template('listing.html')
posts = models.Post.objects.filter(enabled=True).order_by('-pub_time')[:150]
moods = models.Mood.objects.all()
html = template.render(locals())
return HttpResponse(html)
def posting(request):
template = get_template('posting.html')
moods = models.Mood.objects.all()
message = '如要张贴信息,则每一个字段都要填...'
request_context = RequestContext(request)
request_context.push(locals())
html = template.render(request_context)
return HttpResponse(html)
修改 listing.html
<!-- index.html (ch08www project) -->
{% extends "base.html" %}
{% block title %}我有话要说{% endblock %}
{% block content %}
<div class='container'>
<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-6'>" "<div class='col-md-6'>" %}
<div class='panel {%cycle "panel-primary" "panel-info" "panel-warning" "panel-success" %}'>
<div class='panel-heading'>
<table width='100%'>
<tr>
<td>
【{{ p.nickname }}】觉得{{ p.mood }}
</td>
<td align=right>
<i><small>{{ p.pub_time }}</small></i>
</td>
</tr>
</table>
</div>
<div class='panel-body'>{{ p.message | linebreaks }}</div>
</div>
</div>
{% cycle "" "</div>"%}
{% endfor %}
</div>
{% endblock %}
修改 posting.html
<!-- posting.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='POST'>
{% csrf_token %}
现在的心情:<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>
{% endblock %}
测试
page235
ch0821www.tar
https://download.youkuaiyun.com/download/wowocpp/11756635