千与千寻django(七)---表单(form)

基础

在views.py中的每一个用于显示页面的函数都需要以request作为第一个函数参数。request包含了一些有用
的信息,如:
request.path               除去了域名和端口的访问路径,
request.get_host       域名+端口信息
request.get_full_path()   所有路径,包含传递的参数
requets.is_secure()     是否使用https进行链接
还有一个特别的属性request.META,它是一个dict类型,包含了所有HTTP header信息,不过也要根据用户
的实际环境来决定。如
HTTP_REFERER
HTTP_USER_AGENT   用户使用的浏览器信息
REMOTE_ADDR     用户的IP,如果使用代理,也可以显示出来

关于表单的一个小例子

urls.py:
from django.conf.urls import patterns, include, url
from books.views import hello, search_form, search
urlpatterns = patterns('',
    url(r'^search-form/$', search_form),
    url(r'^search/$', search),                     
)
views.py
from django.http import HttpResponse
from django.shortcuts import render_to_response
from books.models import Book
def search_form(request):
    return render_to_response('serctform.html')
def search(request):
    if 'q' in request.GET:
        q = request.GET['q']
        books = Book.objects.filter(title=q)
        return render_to_response('search_results.html', {'books' : books, 'query':q})
    else:
        message = 'You submitted an empty form.'
        return HttpResponse(message)
        
search_results.html
<html>
<body>
<p>Your searched for '{{ query }}'
{% if books %}
    {% for book in books %}
        <li>{{ book.title }}</li>
    {% endfor %}
{% else %}
    <p>No books found.
{% endif %}
</body>
</html>
serctform.html
<!DOCTYPE form PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<form action="/search/" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search">
</form>


</body>
</html>

注:如果有的同学遇到Non-ASCII character '\xe6这样的错误,是因为编码错误,在py文件中加入:
# This Python file uses the following encoding: utf-8
就行了

关于重定向

你应当总是在一个成功处理POST请求之后进行redirect,这样可以避免用户多次点击提交按钮带来的二次请求
问题,有时会造成不好的后果,如向数据库插入重复记录等。
from django.http import HttpResponseRedirect
return HttpResponseRedirect('/success/')
  • 使用Django的form system来简化表单工作
在app文件夹下创建forms.py,其实在哪里创建都可以:
from django import forms
 
class ContactForm(forms.Form):
    subject = forms.CharField()
    email = forms.EmailField(required=False)
    message = forms.CharField()
form的定义和model类的定义很像。我们可以使用python manage.py shell来查看form类的信息。
 
可以看到打印出来的f的信息其实是网页格式的。
也可以改变默认表格的格式。
 
这里的<table>,<ul>都没有包含在输出里,所以可以自由地添加行等。
除了打印出整个form的HTML内容,还可以打印出局的字段的内容。
 
 
还可以使用form类进行验证,使用dict对form类进行初始化。
>>> f = ContactForm({'subject': 'Hello', 'email': 'adrian@example.com', 'message': 'Nice'})
>>> f.is_bound #是否绑定表单类
True
>>> f.is_valid() #数据内容是否合法
True
当数据全部合法时,可以使用clean_data这个属性,用来得到经过'clean'格式化的数据,会所提交过
来的数据转化成合适的Python的类型。

使用from表单

views.py:
from django.shortcuts import render_to_response
from mysite.contact.forms import ContactForm

def contact(request):
    #可以不写,因为python中if中定义的变量,也可以在整个函数中可见    
    form = None 
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            send_mail(
                cd['subject'],
                cd['message'],
                 '463349267@qq.com',
                ['Senssic@163.com'],
            )
            return render_to_response('thiks.html')
    else:
        form = ContactForm()
    return render_to_response('contact_form.html', {'form': form})
# contact_form.html
 
<html>
<head>
    <title>Contact us</title>
</head>
<body>
    <h1>Contact us</h1>

    {% if form.errors %}
        <p style="color: red;">
            {# pulralize 是filter,用来判断是否为添加's'来表示单词的复数形式#}
            Please correct the error{{ form.errors|pluralize }} below.
        </p>
    {% endif %}

    <form action="" method="post">
        <table>       {% csrf_token %}
            {# 可以使用as_ul, as_p来改变格式 #}
            {{ form.as_table }}
        </table>
        <input type="submit" value="Submit">
    </form>
</body>
</html>
因为是发送一个邮件所以要在settings.py中配置在settings中添加如下内容
EMAIL_HOST = 'smtp.qq.com'#smtp服务的地址
EMAIL_PORT = '25'#端口
EMAIL_HOST_USER = '463349267'#用户名
EMAIL_HOST_PASSWORD = 'qiyu****'#密码,呵呵就不显示了

运行成功,好了我们赶紧看看我们的邮箱,Senssic@163.com这个是我的网易邮箱,我用的是我的qq邮箱发送的

噢耶,成功了
注意:有些同学可能遇到ERROR10061的错误,是因为我们的settings中没有相关的配置,按照上面的配置一下就好了
还有的可能遇到“ STARTTLS extension not supported by server”这样的错误是因为你 的代码里指定了使用TLS(EMAIL_USE_TLS=True)收发邮件,但是你的服务器没有配置支持TLS。所以将settings里面的EMAIL_USE_TLS = True 注释掉就行了








深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值