首页 > 技术文章 > Django初识

xzqpy 2019-01-20 16:28 原文

本文阅读注意事项

1.刚进公司的时候我们的版本比较老旧,后来因为维护的扩展且1.8版本也开始不再维护,今年将开始使用1.11.11版本我们这里也统一使用1.11.11
2.计算机名不能是中文,项目也不要用中文
3.使用前关闭浏览器缓存
4.一定要从右上角点击启动 不要右键运行
5.每创建一个app都把他添加到INSTALLED_APPS
6.为了安全方式异网提交表单,我们可以开启csrf中间件,但是我们方便学习先注释,项目完成后再开启,在setting的MIDDLEWARE中
7.可能会有不兼容的情况,尽量使用python3.6
8.用django一定要保证只有一个在运行状态  切记切记!!!!!!!
9..一个pycharm只能有一个工程
10.没有这个url,浏览器会在资源后面添加/ 继续访问
11.在ORM中类一定一定要继承 models.Model
12.每次修改完表之后,必须执行数据库迁移才能起作用
13.发送ajax的按钮一定不能放在form表单里
14.request.user.save() # 修改密码一定要记得保存


使用流程概述

1.安装django并验证是否安装成功

2.创建项目 创建app

3.关闭 csrf

4.注册app

5.配置template

6.配置静态文件  详见【静态文件配置】

7.弄orm setting配置,orm, 输入数据库迁移命令创建表

8.学习路由层

 

 

Django中的小细节

1.如果不想通过manage,py 来输入命令可以在 启动tool

2.会自动创建一个app并且注册,后续需要手动注册

3.浏览器匹配不上的话,就会加一个/重定向

在表单提交的时候一定action要注意前面是否加了/ 
加了就是网服务器下的资源访问
不加是当前页面后面的/rel去访问

4.如果是  SyntaxError: Generator expression must be parenthesized  这个错误可以修改源码 去掉 逗号

5.request.POST 查出来相当于一个列表,get只能拿到最后一个,可以用get_list("K")的形式 ['xzq', 'xzq']

6.query对象 无法使用内部元素的属性 

7.在跨表查询中,正向查找需要用到类的属性(非表名)

8.多对多正向查找 obj.外键.all()

9.如果不再视图层使用ORM可以增加如下代码:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day58.settings")
import django
django.setup()

 在导入models 使用

 

 

 

Django完成一次流程

1.浏览器发送url请求

2.通过 WSGI 拿到path 

3.进url 进行路由匹配

4.进入视图函数

5.拿到html 文件通过自己的content字典 把里面的Django{}进行替换

 

 

6.走一次中间件

3.
视图函数处理具体页面(通过jinja2语法把html页面的一些占位符替换程我们的数据)再返回app
app返回结果为服务器页面(二进制)

 

 

 

 

 

Django是什么

Django就是基于B/C架构的Web应用框架,由我们python开发

Django是一个基于MVC构造的框架。不需要考虑到C主要是T模板 称为 MTV模式。

关于Django的下载

pip3 install django==1.11.9
验证下载成功
 

创建项目 

django-admin startproject mysite
django-admin startapp appname

以上方法不能创建
templates
我们将使用使用pycharm自带的创建
 

Django内容简单的介绍

 

django各个文件的作用

应用名
migrations 数据库迁移记录相关数据
admin.py django后台管理相关
models.py 模型表相关
views.py 视图函数相关
项目名
settings.py 配置文件
urls.py 路由与视图函数的映射关系
templates
项目用到的所有的html文件
manage.py
django入口文件

项目中__init__作用

 

 

注释CSRF 添加app

 在setting 中的MIDDLEWAREINSTALLED_APPS

INSTALLED_APPS里添加添加'app01.apps.App01Config', #项目下的apps.py文件.类名

 写路由

1.导入视图函数

2.发现路径以index开头的就把request交给index 函数处理

 

 

  

 视图函数

 

 

return 三件套

HttpResponse 

HttpResponse (request对象,网页文件,替换的字典)

 

render

 

redirect

重定向新的网页 参数url

内部传入一个字符串参数,返回给浏览器。

 

静态文件配置

如果我们是绝对路径导入静态文件

用的是路由匹配

 

配置STATICFILES_DIR作用:只要是STATIC_URL  Request URL接口前缀  (比如xxx)

那么就查找STATICFILES_DIR下的目录开始找

 

注册,书籍管理实例

网页资源下的某个节点

不写:当前页面提交

写了某个节点

以及 ip+端口+资源的形式 

ORM

1.在setting DATABASES={ 'default':{}} 中配置

ENGINE': 'django.db.backends.mysql',
'NAME': 'day55',  #数据库名
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'123'

  

2.替换数据库 改为mysql的

方式1:在你的项目文件夹下面的__init__.py
方式2:也可以在你的应用文件夹下面的__init__.py

import pymysql
pymysql.install_as_MySQLdb() # 告诉django用pymysql代替mysqldb连接数据库

 

3.创建表

一定要继承models.Model

from django.db import models

# Create your models here.
class MYSQL(models.Model):
  id=models.AutoField(primary_key=True)
      username=models.CharField(max_length=255)
  password=models.CharField(max_length=255)    

  

 

4.在配置完 models之后

可以在class 输入数据库迁移命令

python3 manage.py makemigrations 将你的数据库变动记录到一个小本本上(并不会帮你创建表)
python3 manage.py migrate 将你的数据库变动正在同步到数据库中

  

 创建对象

 

对象=.表.object.create(*kwargs) 

查询对象

对象=.表.object.filter(过滤条件)    <QuerySet [<XXX: XXX object>]>

m1=models.XXX.filter(username=username,password=password)
m1=models.XXX.all()

  

 

#建议不要使用get,get要确保 查出来对象必须只有一个,否则异常

m1=models.XXX(username=username,password=password)
m1.save()


m1=models.XXX.filter(username=username,password=password)
m1.update()

  

 

删:

jqueryset 可以通过delete

m1=models.XXX.objects.filter(username="我是一天个哈哈哈")
m1.delete()

 

推荐阅读