Django基础
Django基础
1.配置环境
确保自己的设备有python的环境是前提
pip install django
pip install pymysql
2.创建Django项目
在存放项目的文件夹内打开终端(cmd)
2.1 用指令创建项目文件
django-admin startproject *** (项目名)
2.2 使用 manage.py创建app应用
创建好项目后,进入到项目文件夹,输入以下指令
python manage.py startapp *** (app项目名)
一个Django项目是可以有多个应用的,可以根据需要创建
3.配置文件 settings.py
3.1项目结构
项目文件夹
- 项目同名文件夹
- __init__.py
- asgi.py
- settings.py -----(操作此文件)
- urls.py
- wsgi.py
- app应用文件夹
- __init__.py
- admin.py
- apps.py
- models.py
- tests.py
- views.py
- manage.py
- 项目同名文件夹
3.2 注册app
INSTALLED_APPS = [
'simpleui',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app',#app名称
]
3.3 配置模板文件
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates/html')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
3.4 连接数据库
这是连接mysql数据库的,如果想用django自带的数据库,可以跳过该步骤
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', #数据库名
'USER': 'root', #用户名
'PASSWORD': '123456', #密码
'HOST': '127.0.0.1', #地址
'PORT': 3306 #端口
}
}
在项目同名文件夹下的
__init__.py文件中加入以下代码
import pymysql
pymysql.version_info=(1,4,13,"final",0)
pymysql.install_as_MySQLdb()
3.5 配置静态文件
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, "/static/")
# media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
配置完成后,在项目中分别创建templates、static、media三个文件夹
4.建立模型
当前目录结构
- 项目文件夹
- media
- static
- templates
- 项目同名文件夹
- __init__.py
- asgi.py
- settings.py
- urls.py
- wsgi.py
- app应用文件夹
- __init__.py
- admin.py
- apps.py
- models.py --(操作文件)
- tests.py
- views.py
- manage.py
4.1 编辑 models.py
from django.db import models
class departInfo(models.Model):
class Meta:
app_label = 'app' #指定app名称
db_table = 'depart' # 指定表名
# verbose_name = "部门" #后台名称 复数
verbose_name_plural = "部门" #后台名称 单数
dname = models.CharField(verbose_name="部门名称", max_length=200)
class userInfo(models.Model):
class Meta:
db_table = 'user' # 指定表名
#字符类型
name = models.CharField(verbose_name="姓名", max_length=200)
#特殊int类型,default为设置默认值
y = ((0, "女"), (1, "男"))
sex = models.SmallIntegerField(verbose_name="性别", choices=y, default=1)
#时间类型,auto_now_add为添加时间
startdate = models.DateTimeField(verbose_name="时间",auto_now_add=True)
#int类型, null=True, blank=True表示可以为空
age = models.IntegerField(verbose_name="年龄", null=True, blank=True)
#外键,on_delete是外键删除处理事件
departname = models.ForeignKey(verbose_name="所在部门", to="departInfo", to_field="id", on_delete=models.SET_DEFAULT, default=-1)
# null=True,blank=True,on_delete=models.SET_NULL 是设置为空
# on_delete=models.SET_DEFAULT,default=Category.objects.get(pk=2)||default=4 是设置为默认值
# on_delete=models.CASCADE 全删!!
4.2 迁移数据至数据库
在项目文件夹内打开cmd终端,运行python manage.py可以查看全部指令
在终端运行以下代码
#生成数据迁移文件
python manage.py makemigrations ****(应用app名称,单app也可以省略)
#数据迁移至数据库
python manage.py migrate
如果后续 models.py文件内容有改动,则需要重新运行这两行指令
5.编写视图函数
打开应用app文件下
views.py文件
from django.shortcuts import render, redirect
from app.models import *
def index(request):
x=userInfo.objects.all()#查询所有
return render(request, "index.html", {"x": x})#locals() 是返回全部局部变量
基础orm操作
#查
userInfo.objects.all()#查询所有
userInfo.objects.filter(字段=查找字段)#没有查询对象不会报错,查找的是集合
userInfo.objects.get(字段=查找字段)#没有查询对象会报错,查找后返回model对象
#增
userInfo.objects.create(字段名=添加值)
#删
userInfo.objects.filter(字段名=查找值).delete()
#修
userInfo.objects.filter(字段名=查找值).update(字段名=修改值)
6.配置路由
6.1设置app路由映射
项目同名文件夹中打开
urls.py
from django.contrib import admin
from django.urls import path,include,re_path
from django.conf import settings
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('app.urls')),
re_path(r'media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
]
6.2编写app应用路由
在应用app下创建
urls.py文件
from django.urls import path,include
from app import views
urlpatterns = [
path('',views.index,name="index"),
]
7.创建模板文件
当前目录结构
项目文件夹
- media
- static
- index.css (新增)
- templates
- index.html (新增)
- 项目同名文件夹
- __init__.py
- asgi.py
- settings.py
- urls.py
- wsgi.py
- app应用文件夹
- __init__.py
- admin.py
- apps.py
- models.py
- tests.py
- urls.py
- views.py
- manage.py
在templates文件夹下创建
index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>展示数据</h1>
<table border="1">
<tr>
<th>id</th>
<th>姓名</th>
<th>性别</th>
<th>加入时间</th>
<th>部门</th>
</tr>
{# 使用for循环遍历 #}
{%for i in x%}
<tr>
<td>
{#循环次数#}
{{forloop.counter}}
</td>
<td>
{{i.name}}
</td>
<td>
{#sex的值是0或1,用get_sex_display可以直接获取对应的名称#}
{{i.get_sex_display}}
<!--
也可以用if判断的写法,如下:
{%if i.sex == 1%}
男
{%else%}
女
{%endif%}
-->
</td>
<td>
{#可视化时间类型的变量#}
{{i.startdate|date:"Y-m-d D H:i"}}
</td>
<td>
{#外键字段直接点字段名取值#}
{{i.departname.dname}}
</td>
</tr>
{%endfor%}
</table>
</body>
</html>
8.启动项目
在项目文件夹中打开cmd终端
#输入指令
python manage.py runserver
#也可以指定端口
python manage.py runserver 8000
打开任意浏览器,最好不是IE;输入网址
127.0.0.1:8000(需要注意端口要和你启动的端口一致)
确认项目跑起来了可以直接点击这里127.0.0.1:8000
9.GET和POST请求
在 setting.py文件中
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',这个是Django自带的保护机制,开发时候可以注释掉,但是为了安全最好不要注释
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
先进行通用操作,在模板文件夹templates下创建 dome.html,代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<a href="/get/?name='cwm'">发送get请求</a>
<form action="/post/" method="post">
{# 如果在setting.py文件中注释了安全协议,可以不加 {% csrf_token %} #}
{# 否则所有的post请求中都必须加上{% csrf_token %} #}
{% csrf_token %}
<input type="text" name="name" value="cwm">
<button type="submit">发送post请求</button>
</form>
</body>
</html>
然后配置路由在app文件夹下的 urls.py;代码如下
urlpatterns = [
path('index/', views.index),
path('get/', views.request_get),
path('post/', views.request_post),
]
9.1GET请求
在视图函数文件中的 views.py
def request_get(request):
x=request.GET.get('name')
return HttpResponse(x)
9.2POS请求
在视图函数文件中的 views.py
def request_post(request):
x=request.POST.get('name')
return HttpResponse(x)
9.3关于路由的内置函数
def index(request):
# 获取请求方式
request.method == "GET"
# 获取请求IP
ip_address = request.META.get('REMOTE_ADDR')
# 获取请求的路由信息
current_route = request.path
#获取请求参数
x=request.GET.get('name') #GET是请求方式,name是参数的key
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果