当前位置: 首页 >> Python >> 【开发】Django--初始化 >> 正文

【开发】Django--初始化

9个月前 (12-23)     作者:Jiaozn     分类:Python     阅读次数:769     评论(1)    

1、Django介绍

它是一个WEB框架


Django--大而全


tornado、flask--小而精



2、Django安装

    https://www.djangoproject.com/download/



3、创建django程序

手动创建


file--new project--Django--Location--create(打开后最好不要有上层目录)


命令创建


cmd>django-admin startproject sitename



4、程序目录



各文件作用:

settings.py--配置文件


urls.py--路由


wsgi.py--用那种wsgi方式(wsgi或者uwsgi)


templates--html模板


manage.py--主程序,启动程序


注意:不要轻易更改项目的名称,涉及的地方太多。

还有其他目录:

app--项目里的一个扩展,可以有多个,如前台和后台






5、 创建app目录

cmd> python manage.py startapp app01


app目录--项目里的一个扩展,可以有多个,如前台和后台


--models.py,对数据库进行操作


--views.py,视图,函数


--tests.py,测试用


--admin.py,后台管理程序  http://127.0.0.1:8000/admin/




6、生成超级用户

没有数据库要先创建表,不然生成用户会报错:no such table:auth_user


cmd> python manage.py syncdb


cmd> yes

此时创建的用户就能进入后台管理,另外生成了一个db.sqlite3数据库文件,用sqlite工具能看到具体信息,如navicat等。


如果要生成到mysql数据库,需要在settings.py里配置。


创建超级用户:

cmd> python manage.py createsuperuser


在后台的用户表里就能看到用户user和group了




7、启动服务

cmd> python manage.py runserver 127.0.0.1:8000




8、第一个Django程序

路由--urls.py

from app01 import views

urlpatterns = [

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

    url(r'^home/', views.home),

]


请求处理--views.py

from django.shortcuts import HttpResponse     

def home(request):                          //必要参数request,包含请求的全部信息。

    return HttpResponse("ok")               //Django返回的字符串需要用HttpResponse()包装,不能直接返回字符串。


9、模板渲染

路由--urls.py

同上


请求处理--views.py


from django.shortcuts import render

dic={'arg':'home1',}

def home(request):

    return render(request,'home.html',dic)  #读取home.html,并返回给请求者,dic是参数,传到页面中

模板--templates/home.html

from django.shortcuts import render

dic={'arg':'home1','user_list':['user1','user2']}

def home(request):

    return render(request,'home.html',dic)  #读取home.html,并返回给请求者,dic是参数,传到页面中



10、render的原理

打开html文件--open()


渲染模板和内容--Template()


返回字符串--HttpResponse()

import datetime

from django import template

import DjangoDemo.settings

  

now = datetime.datetime.now()

fp = open(settings.BASE_DIR+'/templates/Home/Index.html')

t = template.Template(fp.read())

fp.close()

html = t.render(template.Context({'current_date': now}))

return HttpResponse(html)



11、模板语言

模板中也有自己的语言,该语言可以实现数据展示


{{ item }}


{% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}

  forloop.counter

  forloop.first

  forloop.last 


{% if ordered_warranty %}  {% else %} {% endif %}


母板:{% block title %}{% endblock %}

子板:{% extends "base.html" %}

   {% block title %}{% endblock %}


帮助方法:

{{ item.event_start|date:"Y-m-d H:i:s"}}

{{ bio|truncatewords:"30" }}

{{ my_list|first|upper }}

{{ name|lower }}


方法有限,如果想使用跟多模板方法,需要自定义,看下面一节。



12、自定义方法--simple_tag

在app中创建templatetags模块



创建任意 .py 文件,如:xx.py

from django import template

from django.utils.safestring import mark_safe

from django.template.base import resolve_variable, Node, TemplateSyntaxError

   

register = template.Library()

   

@register.simple_tag

def my_simple_time(v1,v2,v3):

    return  v1 + v2 + v3

   

@register.simple_tag

def my_input(id,arg):

    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)

    return mark_safe(result)

在使用自定义simple_tag的html文件开头导入之前创建的 xx.py 文件名

{% load xx %}


html中使用simple_tag

<body>

    {% my_simple_time 1 2 3%}

    {% my_input 'id_username' 'hide'%}

</body>

在settings中配置当前app,不然django无法找到自定义的simple_tag 


1

2

3

4

5

6

7

8

9

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'app01',

]

效果:

第一个函数是算加法,1、2、3是参数;


第二个函数是写一个标签,'id_username' 'hide'是参数。



13、母版,子版,include

templates里创建一个目录:master,目录里创建文件mother.html和son.html



母版mother.html

<head>

    <meta charset="UTF-8">

    <title>{% block title %}{% endblock %}</title>

    <style>

        .header{

            height: 48px;

            background-color: red;

        }

        .body{

            background-color: antiquewhite;

        }

        .body .menu{

            background-color: aqua;

            width: 20%;

            float: left;

        }

        .body .content{

            background-color: aquamarine;

            width: 80%;

            float: left;

        }

    </style>

</head>

<body>

    <div class="header">LOGO</div>

    <div class="body">

        <div class="menu">左侧菜单</div>

        <div class="content">{% block content %}{% endblock %}</div>

    </div>

</body>

</html>


子版son.html

{% extends "master/mother.html" %}

 

{% block title %}

    母版子版

{% endblock %}

 

{% block content %}

    <h1>Son的右侧内容</h1>

    {% include "include/input_group.html" %}

{% endblock %}


路由urls.py

from app01 import views

urlpatterns = [

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

    url(r'^son/', views.son),

]

视图views.py

from django.shortcuts import render

def son(request):

    return render(request,'master/son.html')

给son添加include内容,include功能



input_group.html

<h1>Include输入组合</h1>

<input type="text" />

<input type="text" />

<input type="text" />

<input type="text" />

效果:



注意点:

母版只能继承一个。


当某一小块功能用在很多页面中,用include。


son加css样式,{% block css %}{% endblock %}


son加js,{% block js %}{% endblock %}



14、Django中的静态文件

创建目录



配置文件settings.py


STATIC_URL = '/static/'

STATICFILES_DIRS = (

    os.path.join(BASE_DIR,'static'),

)

调用

<link ref="stylesheet" href="/static/css/common.css">





除非注明,发表在“Jiaozn的博客”的文章『【开发】Django--初始化』版权归Jiaozn所有。 转载请注明出处为“本文转载于『Jiaozn的博客』原地址https://www.jiaozn.com/reed/744.html
0

评论

发表评论   

昵称*

E-mail*(建议输入,以便收到博主回复的提示邮件)

网站

分享:

支付宝

微信