命令行
pip3 install django==1.11.23 -i https://pypi.tuna.tsinghua.edu.cn/simple
pycharm
file -- > settings --> Project Interpreter --> + --> 选择响应的版本下载
命令行
先建立好本地文件夹,然后再本文件夹下执行django-admin startproject 项目名称
pycharm
flie ---> new_project ---> django --->项目路径 --->选解释器
mysite/ ├── manage.py # 管理文件,整个Django项目的启动文件 └── mysite # 项目目录 ├── __init__.py ├── settings.py # 配置 ├── urls.py # 路由 --> URL和函数的对应关系 └── wsgi.py # runserver命令就使用wsgiref模块做简单的web server
命令行
** 切换到项目根目录 ** python manage.py runserver # 127.0.0.1:8000 默认 python manage.py runserver 80 # 127.0.0.1:80 修改端口 python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80 修改IP和端口允许所有主机通过80端口进行访问
pycharm
点绿三角启动带有dj标记的项目,不是简单的右键运行文件
导入 from django.shortcuts import HttpResponse, render, redirect
内部传入一个字符串参数,返回给浏览器。
def index(request): # 业务逻辑代码 return HttpResponse("OK")
除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。
将数据填充进模板文件,最后把结果返回给浏览器。
def index(request): # 业务逻辑代码 return render(request, "index.html", {"name": "alex", "hobby": ["烫头", "泡吧"]})
接受一个URL参数,表示跳转到指定的URL。
def index(request): # 业务逻辑代码 return redirect("/home/")
urls.py写url 和函数的对应关系 写函数
from django.shortcuts import HttpResponse, render ? def index(request): return HttpResponse(‘这里是index‘) # 返回字符串 ? def home(request): return render(request, ‘home.html‘) # 返回html页面 ? urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^index/‘, index), # 路径和函数的对应关系 url(r‘^home/‘, home), ]
在项目根目录存放静态文件夹,静态文件夹下可以存放css、js、img等项目中公用的静态文件或是文件夹。如果不想用 STATICFILES_DIRS 可以不用,都放在 app 里的 static 中也可以。
在settings.py中设置 ? STATIC_URL = ‘/static/‘ # 别名,引入静态文件时以static开头,这里的static不是代表的目录 ? STATICFILES_DIRS = [ os.path.join(BASE_DIR, ‘static‘) ] ? 【举例】 STATICFILES_DIRS = [ #按照列表的顺序进行查找 os.path.join(BASE_DIR, ‘x1‘), os.path.join(BASE_DIR, ‘static‘), os.path.join(BASE_DIR, ‘x2‘) ]
如果是提交post请求,注释掉settings.py
下的MIDDLEWARE
属性的csrf中间件 ‘django.middleware.csrf.CsrfViewMiddleware‘
,用改解决请求时出现403 错误
MIDDLEWARE = [ ‘django.middleware.security.SecurityMiddleware‘, ‘django.contrib.sessions.middleware.SessionMiddleware‘, ‘django.middleware.common.CommonMiddleware‘, # ‘django.middleware.csrf.CsrfViewMiddleware‘, ‘django.contrib.auth.middleware.AuthenticationMiddleware‘, ‘django.contrib.messages.middleware.MessageMiddleware‘, ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘, ]
在settings.py
TEMPLATES属性中,设置公用temples路径,是指到 BASE_DIR/templates文件夹中去取模板
TEMPLATES = [ { ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)] #是指到 BASE_DIR/templates文件夹中去取模板 , ]
后边接触到app后,还可以在app中建立templates,是app专用的。
form表单
action 提交的地址,默认是往本地址提交数据 ;method 请求方法,默认是get,如果是实现认证功能的话,需要手动改成post
input 需要有name ,用于提交数据时数据以可知的键值对方式传输,便于进行数据处理;required=""表示是必填项
submit 提交的按钮或者input
前端校验,在form标签中使用novalidate
django 中可以在函数中使用request.method从看看浏览器提交的请求方式;使用request.POST可以获取form提交的数据,获取的是一个字典
重定向:从django.shortcuts
中导入redirect
,让请求的页面跳转到其他指定的页面。redirect("https://cn.bing.com")
跳转到指定的网页;redirect("/home/")
跳转到本地的页面,前边的/必须要写,不然会加到前边的地址上;
将urls.py中定义的功能分类存放
命令行:
python manage.py startapp app名称
pycharm中:
tools --> run manage.py task --> startapp app名
在settings中进行注册
INSTALLED_APPS = [ ‘app01‘, # 方法一 ‘app01.apps.App01Config‘, # 推荐写法 ]
从app中把函数或者功能导入到urls.py中
from app01 import views
migrations文件夹存放迁移文件用
admin.py django admin
apps.py app的信息
models.py 模型 model 跟数据库有关
views.py 写函数和功能
Object Relational Mapping,对象关系映射,为了解决面向对象与关系数据库存在的互不匹配的技术。
ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。
ORM的缺点是会在一定程度上牺牲程序的执行效率。
ORM的操作是有限的,也就是ORM定义好的操作是可以完成的,一些复杂的查询操作是完成不了。
ORM用多了SQL语句就不会写了,关系数据库相关技能退化...
创建一个mysql数据库;
在settings.py中配置数据库:
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, # 引擎 ‘NAME‘: ‘数据库名‘, # 数据库名称 ‘HOST‘: ‘IP地址‘, # IP ‘PORT‘: 3306, # 端口号 ‘USER‘: ‘用户名‘, # 用户名 ‘PASSWORD‘: ‘密码‘ # 密码 } }
使用pymysql模块连接mysql数据库。
写在与settings同级目录下的__init__.py
中
import pymysql pymysql.install_as_MySQLdb()
写对应关系,在app下的models.py中写类,定义数据表。
class User(models.Model): username = models.CharField(max_length=32) # username varchar(32) password = models.CharField(max_length=32) # password varchar(32)
执行数据库迁移的命令
python36 manage.py makemigrations # 记录下models.py的变更记录 ? python manage.py migrate # 变更记录同步到数据库
所有要实现的功能放在views.py中,如果要用数据库,应该将数据库的models导入到该文件
from django.shortcuts import render,redirect from app01 import models ? def login(request): if request.method == ‘GET‘: return render(request,‘login.html‘) ? elif request.method == "POST": # 获取提交数据 user = request.POST.get("username") pwd = request.POST.get("password") # ret = models.inf.objects.get(username=user,password=pwd) # get方法有一个特点是查不到数据或者查到多个数据时,会报错 ret = models.inf.objects.filter(username=user,password=pwd) if ret: return redirect("/home/") else: return render(request,‘login.html‘) ? def home(request): return render(request,‘home.html‘)
查询操作时 ret = models.User.objects.get(username=user, ) # 找不到就报错 找到多个也报错 ret = models.User.objects.filter(username=user, ) # 过滤筛选,获取满足条件的所有的对象,存放在列表中
AutoField
自增的整形字段,必填参数primary_key=True,则成为数据库的主键。无该字段时,django自动创建。
一个model不能有两个AutoField字段。
IntegerField
一个整数类型。数值的范围是 -2147483648 ~ 2147483647。
CharField
字符类型,必须提供max_length参数。max_length表示字符的长度。
DateField
日期类型,日期格式为YYYY-MM-DD,相当于Python中的datetime.date的实例。
参数:
auto_now:每次修改时修改为当前日期时间。
auto_now_add:新创建对象时自动添加当前日期时间。
【注意】auto_now和auto_now_add和default参数是互斥的,不能同时设置。
DatetimeField
日期时间字段,格式为YYYY-MM-DD HH:MM:ss[.uuuuuu],相当于Python中的datetime.datetime的实例。
1 AutoField(Field) 2 - int自增列,必须填入参数 primary_key=True 3 ? 4 BigAutoField(AutoField) 5 - bigint自增列,必须填入参数 primary_key=True 6 ? 7 注:当model中如果没有自增列,则自动会创建一个列名为id的列 8 【举例】 9 from django.db import models 10 ? 11 class UserInfo(models.Model): 12 # 自动创建一个列名为id的且为自增的整数列 13 username = models.CharField(max_length=32) 14 ? 15 class Group(models.Model): 16 # 自定义自增列 17 nid = models.AutoField(primary_key=True) 18 name = models.CharField(max_length=32) 19 ? 20 SmallIntegerField(IntegerField): 21 - 小整数 -32768 ~ 32767 22 ? 23 PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 24 - 正小整数 0 ~ 32767 25 ? 26 IntegerField(Field) 27 - 整数列(有符号的) -2147483648 ~ 2147483647 28 ? 29 PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 30 - 正整数 0 ~ 2147483647 31 ? 32 BigIntegerField(IntegerField): 33 - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807 34 ? 35 BooleanField(Field) 36 - 布尔值类型 37 ? 38 NullBooleanField(Field): 39 - 可以为空的布尔值 40 ? 41 CharField(Field) 42 - 字符类型 43 - 必须提供max_length参数, max_length表示字符长度 44 ? 45 TextField(Field) 46 - 文本类型 47 ? 48 EmailField(CharField): 49 - 字符串类型,Django Admin以及ModelForm中提供验证机制 50 ? 51 IPAddressField(Field) 52 - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 53 ? 54 GenericIPAddressField(Field) 55 - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6 56 - 参数: 57 protocol,用于指定Ipv4或Ipv6, ‘both‘,"ipv4","ipv6" 58 unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both" 59 ? 60 URLField(CharField) 61 - 字符串类型,Django Admin以及ModelForm中提供验证 URL 62 ? 63 SlugField(CharField) 64 - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号) 65 ? 66 CommaSeparatedIntegerField(CharField) 67 - 字符串类型,格式必须为逗号分割的数字 68 ? 69 UUIDField(Field) 70 - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 71 ? 72 FilePathField(Field) 73 - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能 74 - 参数: 75 path, 文件夹路径 76 match=None, 正则匹配 77 recursive=False, 递归下面的文件夹 78 allow_files=True, 允许文件 79 allow_folders=False, 允许文件夹 80 ? 81 FileField(Field) 82 - 字符串,路径保存在数据库,文件上传到指定目录 83 - 参数: 84 upload_to = "" 上传文件的保存路径 85 storage = None 存储组件,默认django.core.files.storage.FileSystemStorage 86 ? 87 ImageField(FileField) 88 - 字符串,路径保存在数据库,文件上传到指定目录 89 - 参数: 90 upload_to = "" 上传文件的保存路径 91 storage = None 存储组件,默认django.core.files.storage.FileSystemStorage 92 width_field=None, 上传图片的高度保存的数据库字段名(字符串) 93 height_field=None 上传图片的宽度保存的数据库字段名(字符串) 94 ? 95 DateTimeField(DateField) 96 - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] 97 ? 98 DateField(DateTimeCheckMixin, Field) 99 - 日期格式 YYYY-MM-DD 100 ? 101 TimeField(DateTimeCheckMixin, Field) 102 - 时间格式 HH:MM[:ss[.uuuuuu]] 103 ? 104 DurationField(Field) 105 - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型 106 ? 107 FloatField(Field) 108 - 浮点型 109 ? 110 DecimalField(Field) 111 - 10进制小数 112 - 参数: 113 max_digits,小数总长度 114 decimal_places,小数位长度 115 ? 116 BinaryField(Field) 117 - 二进制类型
?
原文:https://www.cnblogs.com/jjzz1234/p/11438309.html