博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
djang1.7 复制粘贴小项目(generic View的使用)
阅读量:4646 次
发布时间:2019-06-09

本文共 5701 字,大约阅读时间需要 19 分钟。

 原文地址: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.pyfrom 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, urlfrom django.contrib import adminurlpatterns = 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 ListViewfrom django.conf.urls import *from app02.models import Pastefrom django.conf.urls.i18n import urlpatternsfrom sre_parse import Patternfrom    django.views.generic import DetailViewfrom django.views.generic.edit import  CreateViewfrom django.conf.urls import patternsfrom gc import get_objectsfrom app02.views import MyDetailView,MyListView,show,MyDeleteView,MyUpdateViewurlpatterns = patterns ('',url(r'^paste/(?P
\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
\d+)$',MyDeleteView.as_view() , name='pastebin_paste_delete'), DetailView读取的是pk或者slugurl (r'^paste/edit/(?P
\d+)$', MyUpdateView.as_view(), name='pastebin_paste_edit'), UpdateView读取的也是pk或者slugurl(r'^$',CreateView.as_view(model=Paste)), ) 配置模板 app02/templates/app02/paste_form.html
首页

Create new Paste

{
% csrf_token %}
{
{ form.as_table }}
View All
app02/templates/app02/paste_detail.html
detail{
% if messages %}
    {
    % for message in messages %}
  • {
    { message }}
  • {
    % endfor %}
{
% endif %}

Paste Details:

{
{ object.id }}
{
{ object.name }}
{
{ object.created_on }}
{
{ object.updated_on }}

Actions

View All
app02/templates/app02/paste_list.html
<h1>list</h1> {
% if show %}

Recent Pastes:

{
% else %}

No recent pastes

{
% endif %}
app02/templates/app02/paste_confirm_delete.html
Insert title here

Really delete paste {
{ object }}?

This action cannot be undone

{
% csrf_token %}

app02/views.py

from django.shortcuts import render# Create your views here.from django.views import genericfrom app02.models import Pastefrom django.core.urlresolvers import reverse_lazyclass 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

你可能感兴趣的文章
Intellij IDEA 配置Tomcat远程调试
查看>>
python3 进程和线程(一)
查看>>
python-综合练习题(if条件语句,while循环,奇数偶数
查看>>
C语言基础-第三章
查看>>
PowerDesigner教程系列(一)概念数据模型
查看>>
python常用类库总结
查看>>
题解 CF962C 【Make a Square】
查看>>
只读数据文件损坏恢复
查看>>
k8s集群上线web静态网站
查看>>
【转】Impala和Hive的关系
查看>>
IDEA操作git
查看>>
有向图算法之拓扑排序
查看>>
windows 下安装elasticsearch
查看>>
C语言学习12:带参数的main函数,无指定的函数形参,调用库函数处理无指定的函数形参,...
查看>>
禁止某程序联网
查看>>
[LOJ6191][CodeM]配对游戏(概率期望DP)
查看>>
mysql中utf8和utf8mb4区别
查看>>
谈谈源码管理那点事儿(一)——源码管理十诫(转)
查看>>
拒绝switch,程序加速之函数指针数组
查看>>
[你必须知道的.NET]第二十五回:认识元数据和IL(中)
查看>>