django基础知识

原文见语雀:https://www.yuque.com/zaygee/guprmo
在这里插入图片描述一.创建项目&创建应用&配置文件
1.创建项目

常用命令:django-admin startproject mysite

2.创建应用

常用命令:django-admin startapp appname、python manage.py startapp appname

3.配置文件
3.1面向整个项目的配置文件

  • settings.py
    包含了项目的初始化设置,可以针对整个项目进行有关参数配置,比如配置数据库、添加应用
    常用配置:
DEBUG:设置为True能够显示详细调试报错信息,设置为False可避免暴露项目的相关信息
ALLOWED HOSTS:可设置允许访问ip,格式为ALLOWED HOSTS = ['127.0.0.1'],设置为"*",所有的ip都能访问,但是不安全
INSTALLED_APPS:新增加的应用需要配置到这里才能激活

在这里插入图片描述
DATABASES:配置数据库,默认配置的是SQLlite

  • urls.py
    主要是把URL映射到应用程序上,可以是某个应用中的urls.py文件(include函数),也可以是某个具体的函数视图
    3.2 创建项目的默认文件
  • admin.py
    django自定义管理工具,比如设置管理界面项目,或者自定义与系统管理有关的类对象,向管理功能增加新的内容
  • apps.py
    应用的配置文件,例如设置一个应用名称
  • migrations
    用于存储应用的数据库表结构,实现在models.py模型类和数据库表之间迁移
  • models.py
    应用的数据模型,可以为空,但是不能删除
  • tests.py
    可以用来编写测试文档来测试所建立的应用
  • views.py
    用于用户保存响应各种请求的函数或类,称之为基于类的视图或者基于函数的视图

二.Django的MTV模式
1.什么是MTV?
django的模型(Mdoel)、模板(Template)、视图(Views)称之为MTV模式
M:Model,数据存取层,负责处理与数据相关,如读取、写入数据等
T;Template,表现层,处理与表现相关的事件,例如在页面中显示相关内容
V:Views,业务逻辑层,是模型(M)和T(模板)之间的桥梁

三.数据模型
1.数据模型的字段和字段属性
在models.py中写的类,都会与数据库中的表都具有对应关系,类中定义的属性,也将对应着数据表中的一个字段
在这里插入图片描述
在这里插入图片描述

  • 常用字段属性:
autoField:一个根据实际ID自动增长的IntegerField,通常不指定,如果不指定,一个主键字段将自动添加到模型中

CharField(max_length=字符长度):字符串,默认的表彰样式是TextInput

TextField:大文本字段,一般超过4000时使用,默认的表单控件是Textarea

DateField([auto_now=False, auto_now_add=False]):使用Python的datetime.date实例表示的日期
        参数说明:
            DateField.auto_now
                每次保存对象时,自动设置该字段为当前时间,用于“最后一次修改”
                的时间戳,它总是使用当前日期,默认为 False
            DateField.auto_now_add
                当前对象第一次被创建时自动设置当前时间,用于创建的时间戳,
                它总是使用当前日期,默认为 False
        说明
            该字段默认对应的表单控件是一个TextInput.在管理员站点添加了一个
            JavaScript写的日历控件,和一个“Today”的快捷按钮,包含了一个额外
            的invalid_date错误消息键
        注意
            auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间
            的任何组合将会发生错误的结果
            
TimeField:使用Python的datetime.time实例表示的时间,参数同DateField

DateTimeField:使用Python的datetime,datetime实例表示的日期和时间,参数同DateField  

FileField:上传文件的字段  

2.数据迁移
数据模型编写好了,开始根据数据模型建立数据库表,在根目录(manage.py文件所在目录)执行命令:python manage.py makemigrations,这时候会生成一个迁移文件
在这里插入图片描述
现在开始真正的创建数据表,执行命令:python manage.py migrate,数据库表则创建成功
创建超级管理员,执行命令:python manage.py createsuperuser

3.数据模型对应数据库的属性
3.1 主键
作用:保证数据库表中记录的唯一性
方法:在某一字段的属性参数中声明primary_key = True,一个数据模型类只能有一个主键

3.2 唯一性
作用:确定某个字段的值不能重复
方法:在某一字段的属性参数中声明unique = True

3.3 Meta
在模型中定义Meta类,用于设置元数据,指的是就是除了字段外的所有内容,例如排序方式、数据库表名等
最常用的:ordering、unique_together
ordering = [‘XX’] 按XX升序排序
ordering = [’-XX’] 按XX降序排序
unique_together:等同于数据库的联合约束,保证数据库不能存重复的信息
在这里插入图片描述
3.4 对应关系
一对一:OneToOneField:一对一,将字段定义在任意一端中
一对多:ForeignKey:一对多,将字段定义在多的端中
多对多:ManyToManyField:多对多,将字段定义在两端中

四.视图
1.web表单的请求过程

1).用户通过客户端第一次向服务器发送表单页面请求,django会创建一个未绑定数据的表单实例(form = LoginForm(),form实例就是未绑定实例),等待用户填写内容
2).用户提交了表单,将内容提交到服务器,在django的视图中接受数据
(form = LoginForm(request.POST)),然后进行表单基本验证
3).通过表单验证,则可以进行下一步操作,例如保存数据、返回信息、url跳转等
4).没有通过表单验证,返回表单实例并带报错信息,返回到前端页面
在这里插入图片描述
2.Form和ModelForm

django的表单系统,主要分两种

  • 基于django.forms.Form
  • 基于django.forms.ModelForm

2.1 forms.Form:
一般用于不怎么与模型交互的表单

2.2 forms.ModelForm:
创建的表单将被自动创建,然后可以稍后由您调整,例如一个有User模型,现在还想创建一个form表单来增加手机号和生日这两个信息到这个模型中,这时候我们就可以使用forms.ModelForm
在这里插入图片描述
在这里插入图片描述

model = UserProfile  # 对应的Model中的类
fields = ("phone", "birth")  # 为你要在表单中使用的字段列表
UserProfile类中定义了 user 宇段 OneToOneField()的含义是通过 user 这个字段为纽带
声明 UserProfile 类与 User类之 的关系是“一对一”的

2.3 ModelForm中的save()方法:
是将表单数据保存到数据库,并生成该数据对象,在参数里多了 commit=False 其结果是数据并没有被保存到数据库,而仅生成了一个数据对象,设置了该数据对象的密码(这个密码是经过校验的),这个操作得益于前面 commit=False 的设 ,如果没有此参数,数据被写到数据库中了,再设置密码就需要重新写入,这样就不用写入两次数据库了
在这里插入图片描述
3.HttpRequest对象

客户端向服务器发送请求,django会在包含请求数据中创建一个HttpReequest对象,
并以参数request传给视图函数,所以request所引用的对象就是HttpRequest对象,
该对象常用属性
path:返回一个字符串,表示请求页面的路径 例如“/blog/admin/”
GET:返回类字典对象,包含所有的http GET参数
POST:返回类字典对象,包含所有的http POST参数
REQUEST:返回类字典对象,包括所有POST和GET数据(一般不用,直接用get、post)

4.HttpResponse对象

  概述:
        作用:给浏览器返回数据
        HttpRequest对象是由Django创建的,HttpResponse对象是由程序员创建
    用法:            
context = {'bb' : bb}
return_string = 'OK'
def title(request):
    ...
    return HttpResponse(return_string)
    return render(request,"XX/aa.html", context)
    return redirect("http://www.google.com")
    HttpResponse():返回,并将作为参数的字符串发给浏览器
    使用render():
                原型:render(request, templateName[, context])
                作用:结合数据和模板,返回一个完整的HTML页面
                参数:
                    request:请求体对象
                    templateName:模板路径
                    context:传递给需要渲染在模板上的数据
    redirect():
                让浏览器跳转去指定的URl

五.模板和静态文件
1.自定义模板
编辑文件settings.py ,修改TEMPLATES的值,BASE_DIR表示是在本项目的根目录,用函数os.path.join()连接两者,所以自定义模板的位置就是根目录的templates(./templates),APP_DIRS设置为False,则django不再按照原来的默认方式寻找模板文件
在这里插入图片描述
2.静态文件的配置
在settings.py增加如下代码,指定了静态文件是存放目录,是在相对项目根目录的static子目录中创建./static目录
在这里插入图片描述

3.前端模板常用语法

block标签:在父模板中预留区域 ,子模板去填充
        语法 : {% block 标签名 %}

                {% endblock 标签名 %}
    extends标签:继承模板,需要写在模板文件的第一行
        语法 : {% extends 'myApp/base.html' %}
                {% block main %}
                    内容
                {% endblock 标签名 %}
CSRF:
跨站请求伪造
    某些恶意网站包含链接,表单,按钮,js,利用登录用户在浏览器中认证,从而攻击服务
防止CSRF
    在settings.py文件的MIDDLEWARE增加'django.middleware.csrf.CsrfViewMiddleware'
    {% csrf_token %}

六.URL的配置
1.URL和视图函数的映射关系
url模板相当于是整个项目的地图,django会根据URL模板响应用户的URL地址,找到对应的视图和函数,然后函数在通过调用模型(models)获取数据,再通过模板(Templates)产出html页面,最后通过url模板逆向返回给用户html文件

2.url模板格式:

urlpatterns = [
    url(正则表达式,view函数,参数,别名)
]
参数说明:
# 一个正则表达式字符串
# 一个可调用对象,通常为一个视图函数
# 可选的要传递给视图函数的默认参数(字典形式)
# 一个可选的name参数
urlpatterns = [
    # 主页
    url(r'^$', views.index, name='index'),  
    # 显示特定主题的页面
    url(r'^topics/$', veiws.topics, name = 'topics'),
    # 显示
    url(r'^topics/(?P<topic_id>)\d+/$', views.topic, name = 'new_topic')]
python的正则表达式中,分组的语法:(?P<name>pattern),
name表示分组名,pattern表示一些匹配正则
别名:可在模板(Template)中,使用别名代替这个URL

常用正则表达:
    ^:指定起始字符或字符串
    $:指定终止字符
    /:对应原来的字符
    \d:任何一个数字字符
    \D:非数字的字符
    \w:任何一个字符[a-zA-Z0-9]
    \W:非任何一个字符[^a-zA-Z0-9]
    ?:代表前面一个字符样式可以重复出现0次或1*:可以重复出现0次或0次以上
    +:可以重复出现1次或1次以上

七.前后端参数传递
1.view->HTML

return_string = 'OK'
def title(request):
    ...
    return HttpResponse(return_string)

2.1 HTML->view

from django.shortcuts import render 
def main_page(request):
    data = [1,2,3,4]
    return render(request, 'index.html', {'data': data})

2.2 Templates href格式

<td>
    <a name="edit" href="{% url 'article:update_article' article.id %}">   # 带参数的url
        <span class="glyphicon glyphicon-pencil"></span>
    </a>
    <a name="delete" href="javascript:" onclick="del_article(this,{{article.id}})">
        <span class="glyphicon glyphicon-trash" style="margin-left:20px;"></span>
    </a>
</td>
django中的超链接,在template中可以用{% url  'app_name:url_name' param%}
其中app_name在工程urls中配置的namespace取值,
url_name是在tweb/urls.py中配置的name对应  
启用的param参数为可选项,当函数存在的时候带上参数对应的取值

主urls.py
在这里插入图片描述
app的urls.py
在这里插入图片描述
tempaltes页面
在这里插入图片描述
3.其他传递方式
javascript方式,待更新。。。。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值