Django基础教程

一、Django 安装
1、查看最新的正式版本 https://www.djangoproject.com/download/
2、pip install Django==2.1.7
二、创建项目
1、使用 django-admin.py(在python安装目录Scripts下)创建项目:

E:\code\python\django>d:\Python\Scripts\django-admin.py startproject HelloWorld

2、目录说明
HelloWorld: 项目的容器。
manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
HelloWorld/settings.py: 该 Django 项目的设置/配置。
HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
3、启动服务器:
python manage.py runserver 0.0.0.0:8000
在浏览器输入服务器的ip及端口号,如果正常启动,输出结果如下:
在这里插入图片描述
三、视图和 URL 配置
1、新建HelloWorld/HelloWorld/view.py

from django.http import HttpResponse
 
def hello(request):
    return HttpResponse("Hello world ! ")

2、修改HelloWorld/HelloWorld/urls.py,绑定 URL 与视图函数。

from django.conf.urls import url
from . import view

urlpatterns = [
    url(r'^$', view.hello),
    # url(r'^hello$', view.hello),
]

保存并刷新页面,可以看到页面已经修改
在这里插入图片描述
可将 url(r'^$', view.hello)修改为url(r'^hello$', view.hello)
在这里插入图片描述
四、模板使用
1、创建HelloWorld/templates/hello.html

<h1>{{ hello }}</h1>

2、修改HelloWorld/HelloWorld/settings.py TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",],

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',
            ],
        },
    },
]

3、修改 HelloWorld/HelloWorld/view.py,增加一个新的对象,用于向模板提交数据:

# -*- coding: utf-8 -*-
from django.shortcuts import render

def hello(request):
    context = {}
    context['hello'] = 'Hello World!'
    return render(request, 'hello.html', context)

再次访问 http://127.0.0.1:8000/hello 可以看到
在这里插入图片描述
五、Django模板标签
1、注释标签

{# 这是一个注释 #}

2、if/else 标签

{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% elif condition2 %}
   ... display 1
{% else %}
   ... display 2
{% endif %}

3、for 标签

{% for athlete in athlete_list reversed %}  # reversed 使得该列表被反向迭代
    <h1>{{ athlete.name }}</h1>
    <ul>
    {% for sport in athlete.sports_played %}
        <li>{{ sport }}</li>
    {% endfor %}
    </ul>
{% endfor %}

4、ifequal/ifnotequal 标签

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% else %}
    <h1>No Welcome!</h1>
{% endifequal %}

5、过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,
一个过滤器管道的输出可以作为下一个管道的输入:

{{ name|lower }}  # 将name转换为小写
{{ my_list|first|upper }}  # 将第一个元素转化为大写
{{ name|truncatewords:"5" }}  # 显示变量 name 的前5个词

6、include 标签
{% include %} 标签允许在模板中包含其它的模板的内容。

{% include "hello.html" %}

7、模板继承
(1)创建HelloWorld/templates/base.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Djano教程(runoob.com)</title>
</head>
<body>
    <p> Django 测试。</p>
    {% block mainbody %}
       <p>原始内容</p>
    {% endblock %}
</body>
</html>

(2)修改HelloWorld/templates/hello.html,继承base.html

{%extends "base.html" %}
<h1>{{ hello }}</h1>
{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}

在这里插入图片描述
六、Django模型(数据库)
1、安装mysql 驱动

pip install mysqlclient

2、修改HelloWorld/HelloWorld/settings.py,文件头部添加 # -- coding: UTF-8 --

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test123',
        'HOST':'localhost',
        'PORT':'3306',
    }
}

3、定义模型(创建 APP)
Django规定,如果要使用模型,必须要创建一个app。使用以下命令创建一个 TestModel 的 app。

E:\code\python\django\HelloWorld>d:\Python\Scripts\django-admin.py startapp TestModel

4、修改HelloWorld/TestModel/models.py

from django.db import models
 
class Test(models.Model):  # 类名代表了数据库表名,且继承了models.Model
    name = models.CharField(max_length=20)  # 类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

5、修改HelloWorld/HelloWorld/settings.py ,添加TestModel

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel',  # 添加此项
]

6、创建表结构

python manage.py migrate   # 创建表结构
python manage.py makemigrations TestModel  # 让 Django 知道模型有一些变更
python manage.py migrate TestModel  # test数据库会出现表TestModel_test

7、创建HelloWorld/HelloWorld/testdb.py

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
 
# 数据库操作:添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:
def testdb(request):
    test1 = Test(name='django')  # 
    test1.save()
    return HttpResponse("<p>数据添加成功!</p>")

8、修改HelloWorld/HelloWorld/urls.py

from django.conf.urls import *
from . import view, testdb

urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
]

访问 http://127.0.0.1:8000/testdb 就可以看到数据添加成功的提示:
在这里插入图片描述
9、数据库增删改查

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test

# 数据库操作
def testdb(request):
    test1 = Test(name='django')  # 相当于SQL中的INSERT
    test1.save()
    response = ""  # 初始化
    list = Test.objects.all()  # 相当于SQL中的SELECT * FROM
    # response2 = Test.objects.filter(id=1)  # filter相当于SQL中的WHERE
    # response3 = Test.objects.get(id=1)  # 获取单个对象
    Test.objects.order_by('name')[0:2]  # 限制返回的数据,相当于 SQL 中的 OFFSET 0 LIMIT 2
    Test.objects.order_by("id")  # 数据排序
    Test.objects.filter(name="django").order_by("id")  # 可以连锁使用
    Test.objects.filter(id=1).update(name='Google')  # 修改数据可以使用 save() 或 update()
    Test.objects.filter(id=1).delete()  # 删除数据库中的对象只需调用该对象的delete()方法
    # 输出所有数据
    for var in list:
        response += var.name + " "
    return HttpResponse("<p>" + response + "</p>")

七、Django 表单
1、GET 请求
创建 /HelloWorld/HelloWorld/search.py

# -*- coding: utf-8 -*-

from django.http import HttpResponse
from django.shortcuts import render_to_response


# 表单
def search_form(request):
    return render_to_response('search_form.html')


# 接收请求数据
def search(request):
    request.encoding = 'utf-8'
    content = request.GET['q']
    if content != '':
        message = '你搜索的内容为: ' + content
    else:
        message = '你提交了空表单'
    return HttpResponse(message)

创建 /HelloWorld/templates/search_form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Django教程</title>
</head>
<body>
    <form action="/search" method="get">   # action后"/search"的意思是跳转到/search页面
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
</body>
</html>

修改/HelloWorld/HelloWorld/urls.py

from django.conf.urls import url
from . import view,testdb,search
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
    url(r'^search-form$', search.search_form),
    url(r'^search$', search.search),
]

python manage.py runserver 0.0.0.0:8000 访问 http://127.0.0.1:8000/search-form
2、POST 请求
创建/HelloWorld/templates/post.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Django教程</title>
</head>
<body>
    <form action="/search-post" method="post">
        {% csrf_token %}  {#Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签#}
        <input type="text" name="q">
        <input type="submit" value="Submit">
    </form>

    <p>{{ rlt }}</p>  {#为表格处理结果预留位置#}
</body>
</html>

创建/HelloWorld/HelloWorld/search1.py

# -*- coding: utf-8 -*-
 
from django.shortcuts import render
from django.views.decorators import csrf
 
# 接收POST请求数据
def search_post(request):
    ctx ={}
    if request.POST:
        ctx['rlt'] = request.POST['q']
    return render(request, "post.html", ctx)

修改/HelloWorld/HelloWorld/urls.py

from django.conf.urls import url
from . import view,testdb,search,search2
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
    url(r'^search-form$', search.search_form),
    url(r'^search$', search.search),
    url(r'^search-post$', search1.search_post),
]

查看结果 http://127.0.0.1:8000/search-post
八、python管理工具
1、登陆
修改/HelloWorld/HelloWorld/urls.py

from django.conf.urls import url
from django.contrib import admin
from . import view, testdb, search, search1

urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
    url(r'^search-form$', search.search_form),
    url(r'^search$', search.search),
    url(r'^search-post$', search1.search_post),
    url(r'^admin/', admin.site.urls),
]

创建超级用户: python manage.py createsuperuser 登陆 http://127.0.0.1:8000/admin/
修改HelloWorld/TestModel/admin.py

from django.contrib import admin
from TestModel.models import Test
 
# Register your models here.
admin.site.register(Test)

刷新后即可看到 Testmodel 数据表
在这里插入图片描述
2、更复杂的数据模型:
修改 HelloWorld/TestModel/models.py

from django.db import models
 
# Create your models here.
class Test(models.Model):
    name = models.CharField(max_length=20)
 
class Contact(models.Model):
    name   = models.CharField(max_length=200)
    age    = models.IntegerField(default=0)
    email  = models.EmailField()
    def __unicode__(self):
        return self.name
 
class Tag(models.Model):
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    name    = models.CharField(max_length=50)
    def __unicode__(self):
        return self.name

修改 HelloWorld/TestModel/admin.py

from django.contrib import admin
from TestModel.models import Test,Contact,Tag
 
# Register your models here.
admin.site.register([Test, Contact, Tag])

创建表结构

python manage.py makemigrations TestModel  # 让 Django 知道模型有一些变更
python manage.py migrate TestModel   # 创建表结构

刷新页面可见:
在这里插入图片描述
3、自定义表单
例如添加Contacts,原始页面:
在这里插入图片描述
修改HelloWorld/TestModel/admin.py

from django.contrib import admin
from TestModel.models import Test,Contact,Tag
 
# 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)
admin.site.register([Test])

修改后
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值