python之路--Django

django

之前在学习socket的时候曾简单搭建过web框架。收发请求,达到自己要的效果。
tornado框架是可以用socket也可以用wsgi的.
wsgi
wsgi 是什么呢,全称是web服务网关接口,或者python web server gateway interface 。就是python语言定义的web服务器和web应用程序或者框架之间的一种通用接口。其他语言中也有类似的接口。他的作用是在协议之间进行转换。

下面是一个简单的web框架,甚至可以把它看为django的雏形

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# created by hansz
# 导入需要的模块
from wsgiref.simple_server import make_server

# 定义处理方法,比如访问index的时候返回什么。
def index():
    return "index"
def login():
    return "login"

# 定义一个路由元组,对应url和处理方法
def  routers():
    urlpatterns = (
        ("/index/",index),
        ("/login/",login),
    )
    return urlpatterns

#启动server。
def run_server(environ,start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    url = environ['PATH_INFO']
    urlpatterns = routers()
    func = None
    for item in urlpatterns:
        if item[0] == url:
            func = item[1]
            break
    if func:
        return func()
    else:
        return "404"
if __name__ == '__main__':
    httpd = make_server('',8080,run_server)
    print "Serving HTTP on port 8080"
    httpd.serve_forever()

下面还有遇到模板语言,jinja2,说之前先来聊聊 MVC 和MTV
你可以把他们称为框架,框架是软件开发中很重要的一部分。
- MVC 全称 Model View Controller 是模型–视图–控制器的缩写,
1. model 应用程序中用于处理程序数据逻辑的部分。
2. view 应用程序中处理数据显示的部分
3. controller 应用程序中处理用户交互的部分

  • MTV 全称 model template views 模型–模板–视图
    1. model 代表模型,数据访问层。包含了关于数据的一切东西
    2. template代表模板,是展现层,决定web页面的展示
    3. views 代表视图 是业务逻辑层。包含了访问模型的逻辑,可以理解为处理模型和模板之间的关系。

Django遵循了MVC模式,它可以被称位MVC框架,因为“C”是Django框架本身处理而导致Django大部分精彩的东西在于模型,模板和视图 所以Django被称位MTV框架

python 有很多web框架,其中django的特点是大而全,集成 了ORM,模型绑定,模板引擎,缓存,session等。几乎能满足你的一切需求。

django初步

首先要做的就是下载django。用easy_install 和pip均可。要注意的是现在django的新版本和之前的版本可能会存在一些差异,建议从最新版学起。
我使用的是1.8版本的。

基本命令

首先要创建一个django程序
如果有pycharm可以直接用pycharm创建,如果没有的话,就用命令行创建一个。
django-admin startproject HostManager

执行完成之后可以看到django的目录结构。
有一个mangae.py管理文件。要启动django程序的时候执行
python manage.py runserver 127.0.0.1:8080
即绑定了本地端口8080,可以通过web浏览器进行访问
但是这个服务器仅限于开发的时候测试使用,生产环境中还需要使用其他web服务器,比如nginx或者apache

django项目里还可以创建多个app
python manage.py startapp login
或者
django-admin.py startapp login

同步数据库
python manage syncdb
1.7以上的版本就需要用以下命令
python manage.py makemigrations
python manage.py migrate
同步数据库的时候需要在model.py中新增类,django就可以通过orm自动帮你创建表了。

清空数据库
python manage.py flush

创建超级管理员
python manage.py createsuperuser

修改用户密码可以用
python manage.py changepassword username

导出数据 导入数据
python manage.py dumpdata login>login.json
python manage.py loaddata login.json

有时候需要进入的项目里面调试models,那么久需要进入环境终端
python manage.py shell
还有数据库命令行
python manage.py dbshell

视图与网址

一个django项目建好之后的结构如下
Hostmanage
├── manage.py
└── Hostmanage
├── init.py
├── settings.py
├── urls.py
└── wsgi.py
新建一个应用usermanage,可以看到Hostmanage 底下会有一个usermanage的文件夹
usermanage/
├── init.py
├── migrations/
├── admin.py
├── models.py
├── tests.py
└── views.py
记着,新建的应用一定要在settings注册一下
在INSTALLED_APPS里面添加上就可以。
这是为了让django程序找到新加应用的模板文件和静态文件

定义视图函数
应用中比较重要的就是views.py 了。这个文件掌控了对服务的请求处理

#coding:utf-8
#从django的http中导入HttpResponse,这个是用来向网页返回内容的。
from django.http import HttpResponse

def index(request):
    return HttpResponse(u"欢迎访问index页面")
# 定义一个index函数,因为是处理网页发来的请求,那么它的第一个参数必须是request,request里面包含get或post的内容,用户浏览器,系统信息等在里面

定义了视图函数之后,还要确定一点,就是用户访问哪些url的时候会使用这个函数去处理
定义视图函数相关的URL
下面的url可能会因为版本存在差异

from django.conf.urls import url
from django.contrib import admin

from usermanage import views  
# 引入自己创建的视图函数

urlpatterns = [
    url(r'^$', views.index), 
    url(r'^admin/', admin.site.urls),
    #url匹配,利用了正则表达式。这会第一个定义的是所有的访问都会被定向到index这个函数去处理。
]

视图函数进阶
上面讲的视图函数只是简单的返回了一串字符。那么如何返回一个网页呢

from django.shortcuts import render
def index(request):
    return render(requeset,'index.html')
    #django的模板系统会自动找到相应app底下的index.html
模板

之前说过一个叫jinja2的模板语言,和django的模板语言差不多。
base.html

<!-- 这是一个母版文件,定义了基本的通用内容 -->
<!DOCTYPE html>
<html>
<head>
<!-- block 和end block 当其他html继承这个母版文件的时候,如果不覆盖这个,那么就会显示母版中的内容-->
    <title>{% block title %}标题{% endblock %} /title>
</head>
<body>

{% include 'nav.html' %}
 <!-- 这个是引入其他html代码,不同功能的分开iain,有利于后期修改 -->

{% block content %}
<div>默认内容</div>
{% endblock %}

{% include 'bottom.html' %}

{% include 'tongji.html' %}

</body>
</html>

index.html

{% extends 'base.html' %}
 <!-- 子版文件继承母版文件base.html,要放在开头。 -->

{% block title %}This is index html{% endblock %}

{% block content %}
这里是index的内容
{% endblock %}

定义了母版文件后,生成其他模板文件就很简单快捷了

for的时候可以获取到计数器
{% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}
  forloop.counter
  forloop.first
  forloop.last 

还可以自定义一些自定义simple_tag来实现不同的需求
在app中创建templatetags文件夹

#!/usr/bin/env python
#coding:utf-8
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

  <!-- 自定义一个返回sum的 -->
@register.simple_tag
def my_sum(*args):
    return sum(args)


@register.simple_tag
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    return mark_safe(result)

就可以再模板语言中使用

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

{% load xxx %} 要放在最开头
d、使用simple_tag

{% extends "base.html"%}
<!-- 想要继承母版 -->
{% load test_simple_tag %}
<!-- 然后倒入自定义的simle_tag -->

{% my_simple_time 1 2 3%}
{% my_input 'id_username' 'hide'%}
<h3>{% my_sum 2 1 2 2534 543 5324 525 325 %}</h3>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值