美文网首页开卷有益程序员码农的世界
【读书】Django教程(菜鸟教程)

【读书】Django教程(菜鸟教程)

作者: 虎七 | 来源:发表于2018-01-18 11:58 被阅读46次

    学习菜鸟教程的Django教程,链接如下: 

    http://www.runoob.com/django/django-tutorial.html

    安装:

    pip install Django

    如果pip < 1.4,使用: 

    pip install https://www.djangoproject.com/download/1.11a1/tarball/

    或者clone代码: 

    git clone https://github.com/django/django.git

    创建一个项目:

    django-admin.py startproject HelloWorld

    创建项目中的一个app:

    django-admin.py startapp TestModel

    启动服务器方法:

    python manager.py runserver 0.0.0.0:8000

    访问方法:  浏览器输入  

    localhost:8000/

    django采用mvc结构,在工程根目录下创建templates目录,并且修改主工程下的settings.py(参见# 修改位置部分):

    ...TEMPLATES = [

        {

           'BACKEND': 'django.template.backends.django.DjangoTemplates',

           'DIRS': [BASE_DIR+"/templates",],       #修改位置

           'APP_DIRS': True,

           'OPTIONS': {

               'context_processors': [

                   'django.template.context_processors.debug',

                   'django.template.context_processors.request',

                   'django.contrib.auth.context_processors.auth',

                    'django.contrib.messages.context_processors.messages',

               ],

           },

       },

    ]

    ...

    这样,可以在templates中放置html文件,由render渲染出来。

    映射规则:

    修改主工程下的urls.py文件,这里把浏览器访问的路径映射到特定的类来处理,如:

    urlpatterns = [

       url(r'^hello$', view.hello),

    ]

    这里的view是py文件,hello是其中的函数,用于处理对*.*.*.*:8000/hello格式的响应,它的主要功能是,将模板文件渲染出来,作为响应值,如:

    from django.shortcuts import render

    def hello(request):

       context          = {}

       context['hello'] = 'Hello World!'

       return render(request, 'hello.html', context)

    其中hello.html是放置在templates中的文件,context中的内容是作为变量传递给hello.html的。

    在模板文件中,是可以使用变量以及控制逻辑的。

    使用变量方式,是 {{ xxx }},比如上面传递的参数会在hello.html中这样使用:{{ hello}}

    控制逻辑的格式是

     {% if xxx % }  xxx  {% endif %} 

    或者 

    {% for %} xxx  {% endfor%} 

    注释的格式是

    {# xxx #}

    还可以继承: 

    在base.html中设定继承部分

    {% block name %} xxx {% endblock %}

    然后再子类中sub.html声明:

    {% extends "base.html" %}

    然后修改继承的段

     {% block name %} xxx {%endblock %}

    还可以包含: 

    {% include"xxx.html" %}

    上面的hello处理,可以区分是GET处理还是POST处理:

    if request.method == 'GET':

       do_something()

    elif request.method == 'POST':

       do_something_else()

    可以通过参数字典直接获取传参,比如:

    request.POST['q']

    这里的'q'就是参数,通过它作为索引值获取到对应的参数。

    比如表单提交的处理如下:

    # 接收POST请求数据

    def search_post(request):

       ctx ={}

       if request.POST:

           ctx['rlt'] = request.POST['q']

       return render(request, "post.html", ctx)

    在响应函数的过程中,还可以跟数据库进行交互。

    首先配置数据库: (也可以配置成mysql)

    DATABASES = {

       'default': {

           'ENGINE': 'django.db.backends.sqlite3',

           'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

           'USER': 'Jacob',

           'PASSWORD': '123456',

           'HOST': 'localhost',

           'PORT': '3306',

        }

    }

    创建用于数据库的app,同时将app名字加入到settings.py的INSTALLED_APPS项中。

    然后就可以定义表了,比如:

    # models.py

    from django.db import models

    class Test(models.Model):

       name = models.CharField(max_length=20)

    然后让数据库把这个表创建起来: (下面的命令不要少一个)

    python manage.py migrate   #创建表结构

    python manage.py makemigrationsTestModel  #让 Django 知道我们在我们的模型有一些变更

    python manage.py migrate TestModel   #创建表结构

    操作数据库内容,就可以通过上面的类来使用,比如生成一个条目:

    test = Test(name='vvv')

    test.save()

    删除一个条目:

    Test.objects.filter(id=1).delete()

    更新一个条目:

    Test.objects.filter(id=1).update(name='Google')

    全更新:

    Test.objects.all().update(name='all')

    写好了数据库操作的代码后,记得在数据库app的目录下,修改admin.py文件:

    from django.contrib import admin

    from TestModel.models import Test

    # Register your models here.

    admin.site.register(Test)

    这里的admin,其实是django提供的一个管理页面,可以很方便的把数据库信息展示出来。

    再详细介绍下admin。

    首先激活这个管理工具: 修改映射规则文件urls.py,在urlpatterns中添加条目:

    url(r'^admin/', admin.site.urls),

    创建一个超级用户:

    python manage.py createsuperuser

    这样,可以在浏览器中通过localhost:8000/admin/进行访问了。

    可以在页面中,看到之前创建的相关数据库,并且操纵它们的内容。

    同时,还可以自定义数据库展示的表单方式,比如定义一个Contact数据库:

    class Contact(models.Model):

       name   = models.CharField(max_length=200)

       age    =models.IntegerField(default=0)

       email  = models.EmailField()

       def __unicode__(self):

           return self.name

    在admin.py中注册的时候,这样自定义表单:

    # Register your models here.

    class ContactAdmin(admin.ModelAdmin):

       fields = ('name', 'email')

    admin.site.register(Contact, ContactAdmin)

    还可以做列表样式,内联其它数据表,增加搜索栏等,示例如下:

    # Register your models here.

    class TagInline(admin.TabularInline):

       model = Tag

    class ContactAdmin(admin.ModelAdmin):

       list_display = ('name','age', 'email') # list

       search_fields = ('name',)

       inlines = [TagInline]  # Inline

       fieldsets = (

           ['Main',{

               'fields':('name','email'),

           }],

           ['Advance',{

               'classes': ('collapse',),

               'fields': ('age',),

           }]

        )

    admin.site.register(Contact, ContactAdmin)

    完整代码工程参见:

    https://pan.baidu.com/s/1mjfS4Ak 密码: dk6n

    相关文章

      网友评论

        本文标题:【读书】Django教程(菜鸟教程)

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