djang1.7 复制粘贴小项目(generic View的使用)

 原文地址:http://agiliq.com/books/djenofdjango/chapter3.html(英文)

BUILDING A PASTEBIN(创建pastebin小项目)

djang里的url.py在我们的项目里使用来控制进入站点的流向,所有进入的urls将会与urlpatterns里配置的正则表达式匹配。

开始:设计app (Designing a pastebin app)

  • Allow users to paste some text (允许用户复制)
  • Allow users to edit or delete the text (允许用户编辑和删除)
  • Allow users to view all texts  (允许用户查看所有的文本信息)
  • Clean up texts older than a day (清除掉超过一天的文本内容)

Some ‘views’ that the user will see are(html展示)

  • A list view of all recent texts     (列出最近的文本)
  • A detail view of any selected text (每个文本的详细信息)
  • An entry/edit form for a text (编辑文本界面)
  • A view to delete a text (删除界面)

我们将会用到的generic View

django.views.generic.DetailView  

(用来显示每个文本的详细信息)

django.views.generic.ListView

(用来显示文本的列表,全部文本)

django.views.generic.DeleteView

(删除)

django.views.generic.UpdateView

(更改、编辑)

创建一个应用

 
   

django-admin manage.py startproject pastebin

(创建项目 )

django-admin manage.py  startapp  app02

(创建 app02 应用)
In pastebin/models.py
from django.db import models
# Create your models here.
class Paste(models.Model):
    text = models.TextField()
    name = models.CharField(max_length=40, null=True, blank=True)
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name or str(self.id)
auto_now_add 把当前时间给 created_on字段,并且每次提交后不可更改。
auto_now 与 auto_now_add 类似,但是每次更改完文本再次提交后会改变,显示当前提交的时间。
id 是默认创建的主键
Adding our app to the project
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#'app01',
'app02',
)

数据库的配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',     
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

 

同步数据库

django-admin manage.py  makemigrations

 django-admin manage.py mirgate

配置app02/urls.py pastebin/urls.py

1、/pastebin/urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
  
    url(r'^admin/', include(admin.site.urls)),
     (r'^pastebin/', include('app02.urls')),
)

2、app/urls.py

'''


@author: xaiowei
'''
from django.views.generic.list import ListView
from django.conf.urls import *
from app02.models import Paste
from django.conf.urls.i18n import urlpatterns
from sre_parse import Pattern
from    django.views.generic import DetailView
from django.views.generic.edit import  CreateView
from django.conf.urls import patterns
from gc import get_objects
from app02.views import MyDetailView,MyListView,show,MyDeleteView,MyUpdateView

urlpatterns = patterns ('',

url(r'^paste/(?P<pk>\d+)/$',MyDetailView.as_view(),name='pastebin_paste_detail'),
url(r'^pastes/$', MyListView.as_view(),name='pastebin_paste_list'),
url(r'^index/$', 'app02.views.show'),
url(r'^paste/delete/(?P<pk>\d+)$',MyDeleteView.as_view() , name='pastebin_paste_delete'),  DetailView读取的是pk或者slug
url  (r'^paste/edit/(?P<pk>\d+)$', MyUpdateView.as_view(), name='pastebin_paste_edit'),    UpdateView读取的也是pk或者slug
url(r'^$',CreateView.as_view(model=Paste)),
                )
配置模板
app02/templates/app02/paste_form.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
    <h1>Create new Paste</h1>
    <form action="" method="POST">
             {% csrf_token %}
            <table> 
                {{ form.as_table }}
            </table>
           <input type="submit" name="create" value="Create">
    </form>
    <a href='{% url 'pastebin_paste_list' %}'>View All</a>
</body>
</html>
app02/templates/app02/paste_detail.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>detail</title>
</head>
{% if messages %}
    <div class="messages">
    <ul>
    {% for message in messages %}
        <li class="{{ message.tag }}">
            {{ message }} 
        </li>
        {% endfor %}
    </ul>
    </div>
{% endif %}

<h1>Paste Details: </h1>
<p>
    <div>
        <label>ID</label>
        <span>{{ object.id }}</span>
    </div>
    <div>
        <label>Name</label>
        <span>{{ object.name }}</span>
    </div>
    <div>
        <label>Text</label>
        <textarea rows="10" cols="50" OnClick="this.select();" readonly="true">{{ object.text }}</textarea>
    </div>
    <div>
        <label>Created</label>
        <span>{{ object.created_on }}</span>
    </div>
    <div>
        <label>Modified</label>
        <span>{{ object.updated_on }}</span>
    </div>
</p>

<h2>Actions</h2>
    <ul>
        <li>
          <a href="{% url 'pastebin_paste_edit' object.id %}">Edit this paste</a>
        </li>
      
        <li>
            <a href="{% url 'pastebin_paste_delete' object.id %}">Delete this paste</a>
        </li>
    </ul>

<a href="{% url 'pastebin_paste_list' %}">View All</a>
app02/templates/app02/paste_list.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><h1>list</h1></title>
</head>
<body>
    {% if show %}
        <h1>Recent Pastes:</h1>
    <ul>
        {% for paste in show %}
        <li>
            <a href="{% url 'pastebin_paste_detail' paste.id  %}">{{ paste }}</a>
        </li>
        {% endfor %}
    </ul>
    {% else %}
        <h1>No recent pastes</h1>
    {% endif %}
</body>
</html>
app02/templates/app02/paste_confirm_delete.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
     <h1>Really delete paste {{ object }}?</h1>
        <h2>This action cannot be undone</h2>
        <form action="{% url pastebin_paste_delete object.id %}" method="POST">
        {% csrf_token %}
        <input type="submit" value="Delete">
    </form>
</body>
</html>

app02/views.py

from django.shortcuts import render

# Create your views here.
from django.views import generic
from app02.models import Paste
from django.core.urlresolvers import reverse_lazy

class MyDetailView(generic.DetailView):
    model = Paste
    template_name='app02/paste_detail.html'

class MyListView(generic.ListView):
    context_object_name='show'
    template_name='app02/paste_list.html'
    
    def get_queryset(self):
        """Return the last five published questions."""
        return Paste.objects.all()
class MyDeleteView(generic.DeleteView):
    model = Paste
    success_url = reverse_lazy('pastebin_paste_list')

class MyUpdateView(generic.UpdateView):
    model = Paste
  
def show(request):
    a = Paste.objects.all()
    return render(request,'app02/index.html',{'a':a})

 

 

 

 

 

转载于:https://www.cnblogs.com/zhuweiblog/p/5184131.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值