首页 > 其他 > 详细

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

时间:2016-02-06 18:22:27      阅读:283      评论:0      收藏:0      [点我收藏+]

 原文地址: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})

 

 

 

 

 

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

原文:http://www.cnblogs.com/zhuweiblog/p/5184131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!