美文网首页数析
python核心编程(django)

python核心编程(django)

作者: SkTj | 来源:发表于2019-03-28 09:12 被阅读123次

    1、django-admin startproject djtest
    python3 manage.py runserver
    2、创建应用:
    ./manage.py startapp blog
    3、修改setting.py
    ALLOWED_HOSTS = ['*']
    INSTALLED_APPS = [
    .....
    'blog',
    ]
    4、创建模型:models.py
    from django.db import models
    class BlogPost(models.Model):
    title = models.CharField(max_length=150)
    body = models.TextField()
    timestamp = models.DateTimeField()
    5、设置数据库引擎:setting.py
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
    }
    6、同步模型到数据库:
    python manage.py makemigrations
    python manage.py migrate
    7、setting.py中的admin模块:
    INSTALLED_APPS=[
    'django.contrib.admin',
    'django.contrib.auth',]
    //访问 http://ip:port/admin
    8、用admin管理其他类,在blog/admin.py中注册:
    from django.contrib import admin
    from blog import models
    class BlogPostAdmin(admin.ModelAdmin):
    list_display = ('title', 'timestamp')
    admin.site.register(models.BlogPost, BlogPostAdmin)
    9、界面包括:模板、视图函数、URL模式
    {{}} 变量
    {% for i in xx %} 控制语句
    {% endfor%}
    10、添加URL控制器:在总urls.py中添加,这一句的意思是blog/urls.py,所以需要创建blog/urls.py文件
    urlpatterns = [
    .......
    path('blog/',include('blog.urls')),
    ]
    11、vi blog/urls.py

    urls.py

    from django.urls import path,include
    import blog.views
    urlpatterns = [
    path('', blog.views.archive),
    ]
    12、编辑视图函数:blog/views.py
    from django.shortcuts import render

    Create your views here.

    from datetime import datetime
    from django.shortcuts import render_to_response
    from blog.models import BlogPost

    def archive(request):
    posts = BlogPost.objects.all().order_by('-timestamp')[:10]
    return render_to_response('archive.html', {'posts': posts})
    //po sts = BlogPost.objects.all().order_by('-timestamp') 按时间逆序查询,-号去掉按时间正序查询
    13、设置模型的排序规则:class Meta:
    class BlogPost(models.Model):
    title = models.CharField(max_length=150)
    body = models.TextField()
    timestamp = models.DateTimeField()
    class Meta:
    ordering = ('-timestamp',)
    14、添加视图:blog/templates/archive.html

    <html>
    <title>My Blog</title>
    <body>

    <form action="/blog/create/" method=post>{% csrf_token %}

    <table>{{ form }}</table>

    <input type=submit>
    </form>


    {% if posts %}
    {% for post in posts %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.timestamp }}</p>
    <p>{{ post.body }}</p>



    {% endfor %}
    {% else %}
    <p>No blog entries have been posted yet.</p>
    {% endif %}

    {{ sql_queries|length }} queries
    {% for qdict in sql_queries %}
    {{ qdict.sql|safe }} ({{ qdict.time }} seconds)
    {% endfor %}

    </body>
    </html>
    14、添加新增的URL控制器
    urlpatterns = [
    path('', blog.views.archive),
    path('create/',blog.views.create_blogpost),
    ]
    15、添加视图控制views.py:
    def create_blogpost(request):
    if request.method == 'POST':
    BlogPost(title=request.POST.get('title'),body=request.POST.get('body'),timestamp=datetime.now(),).save()
    return HttpResponseRedirect('/blog/')
    16、跨站点脚本工具的防御:
    页面中添加: {% csrf_token %}
    views中改写:
    return render_to_response('archive.html', {'posts': posts},RequestContext(request))
    在post方法的头部:
    from django.views.decorators.csrf import csrf_exempt
    @csrf_exempt
    17、在models.py中添加表单模型:
    from django import forms
    class BlogPostForm(forms.ModelForm):
    class Meta:
    model = BlogPost
    exclude = ('timestamp',)
    18、页面中替换:form.as_p/form.as_ul/form.as_table
    <form action="/blog/create/" method=post>{% csrf_token %}

    <table>{{ form }}</table>

    <input type=submit>
    </form>
    19、views修改视图传参:
    from blog.models import BlogPost, BlogPostForm
    return render_to_response('archive.html', {'posts': posts,
    'form': BlogPostForm()}, RequestContext(request)
    20、views中POST方法修改,添加验证:
    from django.views.decorators.csrf import csrf_exempt
    @csrf_exempt
    def create_blogpost(request):
    if request.method == 'POST':
    form=BlogPostForm(request.POST)
    if form.is_valid():
    post=form.save(commit=False)
    post.timestamp=datetime.now()
    form.save()
    return HttpResponseRedirect('/blog/')
    21、视图扩展:{% extends %}
    {% extends "base.html" %}
    22、

    相关文章

      网友评论

        本文标题:python核心编程(django)

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