Python 项目实践三(Web应用程序)第四篇
接著上節(jié)繼續(xù)學(xué)習(xí),本章將建立用戶賬戶
Web應(yīng)用程序的核心是讓任何用戶都能夠注冊賬戶并能夠使用它,不管用戶身處何方。在本章中,你將創(chuàng)建一些表單,讓用戶能夠添加主題和條目,以及編輯既有的條目。你還將學(xué)習(xí)Django如何防范對基于表單的網(wǎng)頁發(fā)起的常見攻擊,這讓你無需花太多時間考慮確保應(yīng)用程序安全的問題。
一 讓用戶能夠輸入數(shù)據(jù)
建立用于創(chuàng)建用戶賬戶的身份驗(yàn)證系統(tǒng)之前,我們先來添加幾個頁面,讓用戶能夠輸入數(shù)據(jù)。我們將讓用戶能夠添加新主題、添加新條目以及編輯既有條目。
1.1 用于添加主題的表單
讓用戶輸入并提交信息的頁面都是表單,那怕它看起來不像表單。用戶輸入信息時,我們需要進(jìn)行驗(yàn)證,確認(rèn)提供的信息是正確的數(shù)據(jù)類型,且不是惡意的信息,如中斷服務(wù)器的代碼。然后,我們再對這些有效信息進(jìn)行處理,并將其保存到數(shù)據(jù)庫的合適地方。這些工作很多都是由Django自動完成的。
在Django中,創(chuàng)建表單的最簡單方式是使用ModelForm,它根據(jù)前面的模型中的信息自動創(chuàng)建表單。創(chuàng)建一個名為forms.py的文件,將其存儲到models.py所在的目錄中,并在其中編寫你的第一個表單:
from django import formsfrom .models import Topicclass TopicForm(forms.ModelForm):class Meta:model = Topicfields=['text']labels={'text':''}1.2URL模式new_topic
#定義learning_logs的URL模式from django.conf.urls import urlfrom . import viewsapp_name='learning_logs' urlpatterns=[#主頁url(r'^$',views.index,name='index'),#顯示所有主題,url(r'^topics/$',views.topics,name='topics'),#特定主題的詳細(xì)頁面url(r'^topics/(?P<topic_id>\d+)',views.topic,name='topic'),#用于添加新主題的網(wǎng)頁url(r'^new_topic/$',views.new_topic,name='new_topic'),]1.3 視圖函數(shù)new_topic()
函數(shù)new_topic()需要處理兩種情形:剛進(jìn)入new_topic網(wǎng)頁(在這種情況下,它應(yīng)顯示一個空表單);對提交的表單數(shù)據(jù)進(jìn)行處理,并將用戶重定向到網(wǎng)頁topics:
from django.shortcuts import renderfrom django.http import HttpResponseRedirect from django.urls import reverse_lazyfrom .forms import TopicForm from .models import Topic# Create your views here. def index(request):'''學(xué)習(xí)筆記的主頁'''return render(request,'learning_logs/index.html')def topics(request):topics = Topic.objects.order_by('date_added')context = {'topics': topics}return render(request, 'learning_logs/topics.html', context)def topic(request,topic_id):'''顯示單個主題以及所有的條目'''topic=Topic.objects.get(id=topic_id)entries=topic.entry_set.order_by('-date_added')context = {'topic':topic,'entries':entries}return render(request, 'learning_logs/topic.html', context)def new_topic(request):'''添加新主題'''if request.method !='POST':#未提交數(shù)據(jù):創(chuàng)建一個新表單form = TopicForm()else :#POST提交的數(shù)據(jù),對數(shù)據(jù)進(jìn)行處理form = TopicForm(request.POST)if form.is_valid():form.save()return HttpResponseRedirect(reverse('learning_logs:topics'))context = {'form':form}return render(request,'learning_logs/new_topic.html',context)1.4 模板new_topic
{% extends "learning_logs/base.html" %} {% block content %} <p>Add a new topic:</p><form action="{% url 'learning_logs:new_topic' %}" method='post'>{% csrf_token %}{{ form.as_p }}<button name="submit">add topic</button> </form> {% endblock content %}1.5 鏈接到頁面new_topic
{% extends "learning_logs/base.html" %} {% block content %} <p>Topics</p> <ul>{% for topic in topics %}<li><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></li>{% empty %}<li>No topics have been added yet.</li>{% endfor %} </ul> <a href="{% url 'learning_logs:new_topic' %}">Add a new topic:</a> {% endblock content %}最后的結(jié)果如下圖:
?
2 添加新條目
現(xiàn)在用戶可以添加新主題了,但他們還想添加新條目。我們將再次定義URL,編寫視圖函數(shù)和模板,并鏈接到添加新條目的網(wǎng)頁。效果如下圖:
3 編輯條目
過程和上面的差不多,這里就不在詳細(xì)說了,效果如下:
小結(jié):至此,“學(xué)習(xí)筆記”已具備了需要的大部分功能。用戶可添加主題和條目,還可根據(jù)需要查看任何一組條目。在下一節(jié),我們將實(shí)現(xiàn)一個用戶注冊系統(tǒng),讓任何人都可向“學(xué)習(xí)筆記”申請賬戶,并創(chuàng)建自己的主題和條目。
?未完待續(xù)
?
轉(zhuǎn)載于:https://www.cnblogs.com/ChinacloudTech/p/8205442.html
總結(jié)
以上是生活随笔為你收集整理的Python 项目实践三(Web应用程序)第四篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ckeditor 框架分析 几个核心“人
- 下一篇: 【摘录】MTK按键扫描原理及相关代码