Django基础

来源:互联网 发布:百度人工智能发展现状 编辑:程序博客网 时间:2024/06/05 05:48

1.MVC与MTV:

两个Web框架MVC MTV
MVC
Mobel View Controller
数据库 模板文件 业务处理
MTV
Moble Template View
数据库 模板文件 业务处理
Django是一个基于MTV的框架

2.安装Django

pip3 install django

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts

3.创建Django工程

django-admin startproject mysite 【工程名称】

mysite
- mysite # 对整个程序进行配置
- init
- settings # 配置文件
- url # URL对应关系
- wsgi # 一套WSGI规范 本质是依据规则创建一个Socket
- manage.py #管理django程序:
- python manage.py
- python manage.py startapp xx
- python manage.py makemigrations
- python manage.py migrate

4.运行Django功能

python manage.py runsever 127.0.0.1:port

5.创建app

以chouti为例子
-chouti
-配置
-主站 app
-后台管理 app

创建app
python manage.py startapp cmdb
python manage.py startapp openstack
python manage.py startapp …(可以创建很多)

6.app简介

app目录:
migrations #数据修改表结构
admin #Django为我们提供的后台管理
app #配置当前app
models #ORM,写指定的类,通过命令就可以创建数据库结构
tests #单元测试
views #业务逻辑代码

from django.shortcuts import renderf = open('templates/login.html','r',encoding='utf-8')data = f.read()f.close()上述三行代码 = render(request,'login.html')

7.新建Django

①配置模板的路径 即templates的路径

settings->’DIRS’->[os.path.join(BASE_DIR,’templates’)]

TEMPLATES = [        {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [os.path.join(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',                ],            },        },    ]

②配置静态目录static

STATIC_URL = '/static/'STATICFILES_DIRS = (    os.path.join(BASE_DIR,'static'),)<link rel="stylesheet" href="/static/commons.css"/> /static<script src="/static/jquery.min.js"></script>   /static

8.CSRF

CSRF:跨站请求伪造
settings中先找到middleware 暂时先注释这句话csrf
注意:

urls里边的urlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^login/', views.login),    url(r'^home', views.home),

如果有斜杠r’^login/’则在login.html中action=”/login/”也有斜杠
如果没有斜杠r’^home’则在login.html中action=”/home”也没有斜杠
要注意这个对应关系,否则会出现403错误

9.写代码

①定义路由规则

在url.py中写
“login” –> 函数名 不带括号

②定义试图函数

    app下views.py        def fun(request):            # request.method    GET/POST            # request.GET.get('',None)  获取请求发来的数据            # request.POST.get('',None)            #return HttpResponse('字符串')            #return render(request,'Http模板的路径')            #return redirect('/只能填URL')     #redirect重定向

③模板渲染

Django中有特殊的模板语言{{}}

def func(request):    return render(request,'index.html',{'current_user':sms})index.html<html>    <body>        <div>{{current_user}}</div>  {{}}是一个特殊的标记可以替换sms    </body></html>==>显示出来的样式,生成的sms的字符串<html>    <body>        <div>sms</div>   {{}}是一个特殊的标记可以替换sms    </body></html>

For循环

def func(request):    return render(request,'index.html',{'current_user':sms},                 'user_list':['alex','erric'])<html>    <body>        <div>{{current_user}}</div>         <ul>            {% for row in user_list %}            <li>{{row}}</li>            {% endfor %}        </ul>    </body></html>

索引

def func(request):    return render(request,'index.html',{'current_user':sms},                 'user_list':['alex','erric'],                 'user_dict':{'k1':'v1','k2':'v2'})<html>    <body>        <div>{{current_user}}</div>         <a>{{ user_list.0 }}</a>        <a>{{ user_list.1 }}</a>        <a>{{ user_dict.k1 }}</a>        <a>{{ user_dict.k2 }}</a>    </body></html>

条件

def func(request):    return render(request,'index.html',                 {'current_user':sms},                 'age': 18,                 'user_list':['alex','erric'],                 'user_dict':{'k1':'v1','k2':'v2'})<html>    <body>        <div>{{current_user}}</div>         <a>{{ user_list.0 }}</a>        <a>{{ user_list.1 }}</a>        <a>{{ user_dict.k1 }}</a>        <a>{{ user_dict.k2 }}</a>        {% if age %}            <a>有年龄</a>            {% if age > 16 %}                <a>老男人</a>            {% else %}            <a>小鲜肉</a>            {% endif %}        {% else %}            <a>无年龄</a>        {% endif %}    </body></html>