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: 包含所有上传文件的类字典对象;

原文地址:https://www.cnblogs.com/g-123456/p/6232326.html