美文网首页
DjangoGirls Blog开发流程

DjangoGirls Blog开发流程

作者: SmalltalkVoice | 来源:发表于2016-05-28 15:12 被阅读260次

    DjangoGirls Blog开发流程


    1.安装Python,pip,virtualenv,Django
    2.启动virtualenv
    3.django-admin startproject mysite .
    4.修改mysite/setting.
    修改time_zone = 'Asia/Shanghai'
    修改static_url = '/static'
    数据库设置默认sqlite3

    5.生成数据库:python manage.py migrate
    6.启动Django:python manage.py runserver 0.0.0.0:8000
    7.生成应用blog: python manage.py startapp blog
    8.修改mysite/settings.py,INSTALLED_APPS添加blog.

      INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',
      )
    
    

    9.修改blog/models.py,添加blog的模型

      from django.db import models
      from django.utils import timezone
    
    
      class Post(models.Model):
        author = models.ForeignKey('auth.User')
        title = models.CharField(max_length=200)
        text = models.TextField()
        created_date = models.DateTimeField(
                default=timezone.now)
        published_date = models.DateTimeField(
                blank=True, null=True)
    
        def publish(self):
            self.published_date = timezone.now()
            self.save()
    
        def __str__(self):
            return self.title
    

    在数据库中为模型创建数据表:python manage.py makemigrations blog
    迁移文件:python manage.py migrate blog
    10.修改blog/admin.py

       from django.contrib import admin
       from .models import Post
    
       admin.site.register(Post)
    
    

    创建超级管理员

       (myvenv) ~/djangogirls$ python manage.py createsuperuser
       Username: admin
       Email address: admin@admin.com
       Password:
       Password (again):
       Superuser created successfully.
    
    

    登录http://localhost:8000/admin/
    在Posts一栏,点击Add,添加几篇文章

    11.修改mysite/urls.py

    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
            url(r'^admin/', include(admin.site.urls)),
            url(r'', include('blog.urls')),
    ]
    
    

    12.添加blog/urls.py

    from django.conf.urls import url
    from . import views
    urlpatterns = [
            url(r'^$', views.post_list, name='post_list'),
    ]
    

    13.创建blog/templates/blog目录.创建post_list.html文件
    修改blog/views.py

        from django.shortcuts import render
        from django.utils import timezone
        from .models import Post
    
        def post_list(request):
           posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
           return render(request, 'blog/post_list.html', {'posts': posts})
    

    14.创建base.html

    
    {% load staticfiles %}
    <html>
        <head>
        <title>Django Girls blog</title>
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <link href='//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
        <link rel="stylesheet" href="{% static 'css/blog.css' %}">
        </head>
        <body>
            <div class="page-header">
                <h1><a href="/">Django Girls Blog</a></h1>
            </div>
            <div class="content container">
                <div class="row">
                    <div class="col-md-8">
                    {% block content %}
                    {% endblock %}
                    </div>
                </div>
            </div>
            </body>
        </html>
    
    

    创建post_list.html

    {% extends 'blog/base.html' %}
    
        {% block content %}
            {% for post in posts %}
                <div class="post">
                    <div class="date">
                        {{ post.published_date }}
                    </div>
                    <h1><a href="">{{ post.title }}</a></h1>
                    <p>{{ post.text|linebreaks }}</p>
                </div>
            {% endfor %}
        {% endblock content %}
    

    15.创建文章详细页面
    修改blog/urls.py

        from django.conf.urls import include, url
        from . import views
    
        urlpatterns = [
           url(r'^$', views.post_list, name='post_list'),
           url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'),
        ]
    
    
    

    修改blog/view.py

        def post_detail(request, pk):
            post = get_object_or_404(Post, pk=pk)
            return render(request, 'blog/post_detail.html', {'post': post})
    

    添加blog/templates/blog/post_detail.html

    {% extends 'blog/base.html' %}
    
        {% block content %}
            <div class="post">
                {% if post.published_date %}
                    <div class="date">
                        {{ post.published_date }}
                    </div>
                {% endif %}
                <h1>{{ post.title }}</h1>
                <p>{{ post.text|linebreaks }}</p>
            </div>
        {% endblock %}  
    

    16.添加新页面
    创建blog/form.py

    from django import forms
    
    from .models import Post
    
    class PostForm(forms.ModelForm):
    
        class Meta:
            model = Post
            fields = ('title', 'text',)
    
    

    修改blog/templates/blog/base.html

    {% load staticfiles %}
        <html>
            <head>
                <title>Django Girls blog</title>
                <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
                <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
                <link href='//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
                <link rel="stylesheet" href="{% static 'css/blog.css' %}">
            </head>
            <body>
                <div class="page-header">
                    <a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
                    <h1><a href="/">Django Girls Blog</a></h1>
                </div>
                <div class="content container">
                    <div class="row">
                        <div class="col-md-8">
                            {% block content %}
                            {% endblock %}
                        </div>
                    </div>
                </div>
            </body>
        </html>
    

    修改blog/urls.py

    from django.conf.urls import include, url
    from . import views
    
    urlpatterns = [
        url(r'^$', views.post_list, name='post_list'),
        url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'),
        url(r'^post/new/$', views.post_new, name='post_new'),
    ]
    

    修改blog/views.py,添加

    from .forms import PostForm
    from django.shortcuts import redirect
    def post_new(request):
        if request.method == "POST":
            form = PostForm(request.POST)
            if form.is_valid():
                post = form.save(commit=False)
                post.author = request.user
                post.published_date = timezone.now()
                post.save()
                return redirect('blog.views.post_detail', pk=post.pk)
        else:
            form = PostForm()
        return render(request, 'blog/post_edit.html', {'form': form})
    
    

    添加blog/templates/post_edit.html

    {% extends 'blog/base.html' %}
    
        {% block content %}
            <h1>New post</h1>
            <form method="POST" class="post-form">{% csrf_token %}
                {{ form.as_p }}
                <button type="submit" class="save btn btn-default">Save</button>
            </form>
        {% endblock %}
    

    17.编辑博客内容
    修改blog/templates/blog/post_detail.html

    {% extends 'blog/base.html' %}
    
        {% block content %}
            <div class="post">
                {% if post.published_date %}
                    <div class="date">
                        {{ post.published_date }}
                    </div>
                {% endif %}
                <a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
                <h1>{{ post.title }}</h1>
                <p>{{ post.text|linebreaks }}</p>
            </div>
        {% endblock %}
    

    在blog/urls.py中添加

     url(r'^post/(?P<pk>[0-9]+)/edit/$', views.post_edit, name='post_edit'),
    

    在blog/views.py中添加

    def post_edit(request, pk):
        post = get_object_or_404(Post, pk=pk)
        if request.method == "POST":
            form = PostForm(request.POST, instance=post)
            if form.is_valid():
                post = form.save(commit=False)
                post.author = request.user
                post.published_date = timezone.now()
                post.save()
                return redirect('blog.views.post_detail', pk=post.pk)
        else:
            form = PostForm(instance=post)
        return render(request, 'blog/post_edit.html', {'form': form})
    

    ||>>END<<||

    相关文章

      网友评论

          本文标题:DjangoGirls Blog开发流程

          本文链接:https://www.haomeiwen.com/subject/bwifdttx.html