zoukankan      html  css  js  c++  java
  • Web开发之django(一基础篇)



    什么是web框架?

    框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,
    简单地说,就是你用别人搭建好的舞台来做表演。对于,所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实
    就是一个socket客户端。

    ############################################################################################


    基本配置
    一、创建django程序
    终端命令:django-admin startproject sitename
    IDE创建Django程序时,本质上都是自动执行上述命令
    其他常用命令:
      python manage.py runserver 0.0.0.0
      python manage.py startapp appname
      python manage.py syncdb
      python manage.py makemigrations
      python manage.py migrate
    python manage.py createsuperuser

    二、静态文件

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


    MVC和MTV模式:

    著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。
    模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求。

    Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:
    Model(模型):负责业务对象与数据库的对象(ORM)
    Template(模版):负责如何把页面展示给用户
    View(视图):负责业务逻辑,并在适当的时候调用Model和Template
    此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template



    一,Django URL(路由系统)

    URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;
    你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

    1 urlpatterns = [
    2 url(正则表达式, views视图函数,参数,别名),
    3 ]

    参数说明:

    一个正则表达式字符串
    一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    可选的要传递给视图函数的默认参数(字典形式)
    一个可选的name参数

    url实例:

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

    urlpatterns = [

    url(r'^articles/2003/$', views.special_case_2003),

    #url(r'^articles/[0-9]{4}/$', views.year_archive),

    url(r'^articles/([0-9]{4})/$', views.year_archive), #no_named group

    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),

    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),

    ]

    from django.conf.urls import url
    from app01 import views

    urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
    ]



    二,Models数据库的配置

    1 django默认支持sqlite,mysql, oracle,postgresql数据库。
    django默认使用sqlite的数据库,默认自带sqlite的数据库驱动, 引擎名称:django.db.backends.sqlite3

    2 mysql驱动程序
    MySQLdb(mysql python)
    mysqlclient
    MySQL
    PyMySQL(纯python的mysql驱动程序)

    3 在django的项目中会默认使用sqlite数据库,在settings里有如下设置:
    如果我们想要更改数据库,需要修改如下:
    DATABASES={
    'default':{
    'ENGINE':'django.db.backends.mysql',
    'NAME':'django"_com',
    'USER':'root',
    'PASSWORD':'password',
    'HOST':'......',
    "PORT":'......',
    }
    }



    三,Template基础(模板系统的介绍)

    模版的组成
    组成:HTML代码+逻辑控制代码

    逻辑控制代码的组成
    1 变量(使用双大括号来引用变量): {{var_name}}
    深度变量的查找(万能的句点号)

    2 标签(tag)的使用(使用大括号和百分比的组合来表示使用tag)

    {% if %} 的使用:
    {% if %}标签计算一个变量值,如果是“true”,即它存在、不为空并且不是false的boolean值,系统则会显示{% if %}和{% endif %}间的所有内容
    {% if num >= 100 and 8 %}

    {% if num > 200 %}
    <p>num大于200</p>
    {% else %}
    <p>num大于100小于200</p>
    {% endif %}

    {% elif num < 100%}
    <p>num小于100</p>

    {% else %}
    <p>num等于100</p>

    {% endif %}


    {% for %}的使用
    {% for %}标签允许你按顺序遍历一个序列中的各个元素,每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容
    < ul >
    { %for obj in list %}
    < li > {{obj.name}} < / li >
    { % endfor %}
    < / ul >


    {%csrf_token%}:csrf_token标签
    用于生成csrf_token的标签,用于防治跨站攻击验证。注意如果你在view的index里用的是render_to_response方法,不会生效
    其实,这里是会生成一个input标签,和其他表单标签一起提交给后台的。


    {% url %}: 引用路由配置的地址

    {% with %}:用更简单的变量名替代复杂的变量名
    {% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}

    {% verbatim %}: 禁止render

    {% load %}: 加载标签库


    3 自定义filter和simple_tag
    a、在app中创建templatetags模块(必须的)
    b、创建任意 .py 文件,如:my_tags.py
    c、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py :{% load my_tags %}
    d、使用simple_tag和filter(如何调用)
    e、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
    from django import template
    from django.utils.safestring import mark_safe

    register = template.Library() #register的名字是固定的,不可改变


    @register.filter
    def filter_multi(v1,v2):
    return v1 * v2


    @register.simple_tag
    def simple_tag_multi(v1,v2):
    return v1 * v2


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


    -------------------------------.html
    { % load xxx %} # 首行

    # num=12
    {{num | filter_multi: 2}} # 24

    {{num | filter_multi: "[22,333,4444]"}}

    { % simple_tag_multi 2 5 %} 参数不限, 但不能放在if for语句中
    { % simple_tag_multi num 5 %}


    4 extend模板继承
    { % extends "base.html" %}

    { % block title %}
    The current time
    { % endblock %}

    { % block content %}
    < p > It is now {{current_date}}. < / p >
    { % endblock %}




    四,Views(视图函数)

    HttpResponse:传入一个数据,返回一个字符串
    render(request,"xxx.html",{"obj":xx_"list"}
    1、找到html模版,open函数打开获取到内存
    2、Django的模版引擎: html模版的内容 + 数据 => 渲染(替换) ===》 最终字符串
    3、HttpResponse(最终字符串)
    redirect:页面跳转。

    request请求(Request对象的属性和方法):

    path: 请求页面的全路径,不包括域名
    method: 请求中使用的HTTP方法的字符串表示。全大写表示。
    GET: 包含所有HTTP GET参数的类字典对象
    POST: 包含所有HTTP POST参数的类字典对象
    COOKIES: 包含所有cookies的标准Python字典对象;keys和values都是字符串。
    session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
    FILES: 包含所有上传文件的类字典对象;

  • 相关阅读:
    关于数组的排序和拷贝!
    append和appendTo的区别!
    Layui的一点小理解(上)
    winfrom数据导出
    检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
    文件监听
    C# winform 启动外部程序
    bat命令复制文件
    3.将模型添加到 ASP.NET Core MVC 应用
    2.将视图添加到 ASP.NET Core MVC 应用
  • 原文地址:https://www.cnblogs.com/g-123456/p/6232326.html
Copyright © 2011-2022 走看看