Python新手使用的Django架站的16堂课 --- 第八章(三)

本篇详细讲解了Django中窗体类的基本应用,包括如何创建和使用窗体,以及解决Django simple Captcha模块安装问题。通过实例演示了如何在Django项目中配置和使用验证码,为网站添加安全防护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值