创建Django项目,实现视图,路由

初识Django

1、创建Django项目

Django项目的创建的路径不要有中文和空格;【计算机名称不要是中文】

复制代码
1、在cmd中命令进行创建Django项目
	打开存放项目的位置
	创建Django项目:django-admin startproject 项目名称(注意:项目名称不要是中文)
	启动django项目,进入到Django中的(manage.py所在的文件位置中)
	python manage.py runserver 端口号

2、在pycharm创建Django项目
	flie ------ new project
	选择Django进行创建
	(pycharm有个小bug , 需要手动的在settings.py文件中导入os模块)
	
3、要实现功能的分隔 ------ 创建应用(app)
	创建应用的命令:python manage.py startapp 应用名称

Django项目文件作用

复制代码
DjangoDemo
|---DjangoDemo	存放的是项目的配置文件
|	|--- asgi.py  异步操作的文件
|	|--- settings.py   项目的配置文件
|	|--- urls.py	项目的路由配置
|	|--- wsgi.py	封装 socket 服务端的东西
|--- myapp
|	|--- migrations	数据迁移记录
|	|--- admin.py  后台管理文件
|	|--- apps.py 	用来注册app
|	|--- models.py  用来操作数据库 ,模型
|	|--- tests.py  测试文件,可以单独运行
|	|--- views.py  视图文件,响应数据操作
|--- templates  存放html文件,模板文件
|--- manage.py  Django项目的执行启动文件

Django项目中的settings.py文件中的配置信息

复制代码
BASE_DIR = 项目的根目录
SECRET_KEY = 秘钥, 生成随机字符,用来对数据加密
DEBUG = Django项目启动的模式,默认True:启动之后项目执行过程中有异常会抛出错误信息;是在开发和测试时使用。
		当设置为False , 表示在生产环境中启动,设置前确保ALLOWED_HOSTS的值不能为空
ALLOWED_HOSTS = 设置允许访问这个项目的ip
			[] : 空列表 表示只允许当前本地主机访问:127.0.0.1
			['*']:表示允许所有主机访问
			['192.168.163.21','192.168.163.74',......]:允许被指定的ip访问
INSTALLED_APPS = 注册项目中自己创建的app
MIDDLEWARE = 注册中间件使用
ROOT_URLCONF = 配置根目录级别的路由
TEMPLATES = 配置模板使用的配置引擎,以及访问模板文件的路径
WSGI_APPLICATION = 项目运行在WGSI兼容的web服务器中
DATABASES = 配置操作数据库信息
AUTH_PASSWORD_VALIDATORS = django的授权认证
LANGUAGE_CODE = 项目语言 'zh-Hans':中文
TIME_ZONE = 项目使用的时区时间,'UTC':零时区 , 'Asia/Shanghai':东八区
STATIC_URL = 静态文件配置(css , js , image)
DEFAULT_AUTO_FIELD = 默认Auto认证

注册应用

复制代码
在settings.py 文件中INSTALLED_APPS列表的最后添加配置信息
写法一:'myapp.apps.MyappConfig'	[应用名称.apps.应用名称Config]
写法二:'myapp' [应用名称]

2、实现视图

视图的响应,响应功能就要写到应用的views.py文件中

python 复制代码
def index(request):
    '''
    :param request: 接收浏览器发送的请求信息 ,视图函数必须要有的参数
    :return: HttpResponse:响应字符串信息
    '''
    return HttpResponse('大家好 , 我是帅气的靓仔阿宸')

通过 urls.py 文件中对路由和视图函数之间的映射关系进行配置,使用 path 函数对路由配置对应关系

python 复制代码
from myapp import views
urlpatterns = [
    path('index/' , views.index),
]

响应 html 文件视图

python 复制代码
def html_info(request):
    # 响应 html文件 需要 render
    # 返回一个含有 html 标签的字符串
    return render(request , 'info.html')

def html_get_data(request):
    # render(request , html文件 , 数据)
    # render 传入的参数数据必须以字典类型传入
    data =  {'name':'尔康' , 'age': 18 , 'address':'重庆'}
    return render(request, 'info.html' , data)

def html_get_data2(request):
    name = '叶晓春'
    age = 18
    address = '广西'
    '''
    locals() 方法: 把当前视图所在的名称空间中所有的名称全部传递到html文件中
    '''
    return render(request, 'info.html' , locals())
python 复制代码
path('info/' , views.html_info),
path('get_data/' , views.html_get_data),
path('get_data2/' , views.html_get_data2),

路由重定向

python 复制代码
def baidu(request):
    # rediect  重定向 , 实现url跳转
    return redirect('https://www.bilibili.com')

def myurl(request):
    # 重定向到自己项目中的url
    return redirect('/get_data2/')

def myview(request):
    # 重定向到当前视图文件内的视图函数
    return redirect(index)
python 复制代码
path('bd/' , views.baidu),
path('my/' , views.myurl),
path('my2/' , views.myview),

3、路由

路由: 用户通过使用 url 访问网络资源,服务器会根据 URl 请求到对应的路由配置中查询对应的视图关系。

url的配置是一个列表 , 查询是在列表中个从上往下查询。

正则匹配路由:用正则分组进行匹配 , 在项目中映射正则相关的 url 的时候 , 需要用 re_path 进行配置对应的视图关系

路由的正则分组匹配

复制代码
无名分组
可以匹配 url 后面的一个数据 , 传递到这个路由对应的视图函数中作为参数使用,这个参数没有指定名称

有名分组
可以匹配 url 后面的一个数据 , 传递到这个路由对应的视图函数中作为参数使用,这个参数在路由匹配的时候有指定对应的名称 , 视图函数在接收的时候必须使用指定的名称
python 复制代码
def url_data(request , data):
    # 无名分组 , data 的数据是由 url 匹配的时候获取到的
    return HttpResponse(f'这是无名分组,接收到 url 的参数为{data}')

def url_data2(request , number):
    # number 一定要和 路由中定义的名称一致
    return HttpResponse(f'这是有名分组,接收到 url 的参数为{number}')
python 复制代码
# 无名分组
# (正则表达式)
re_path('url_text/(\w+)/' , views.url_data),
# 有名分组 (?P<名称>正则表达式)
re_path('url_data/(?P<number>\d+)/'  , views.url_data2),
相关推荐
像风一样!14 小时前
MySQL数据库如何实现主从复制
数据库·mysql
大白的编程日记.14 小时前
【MySQL】数据库表的CURD(二)
android·数据库·mysql
友善的鸡蛋14 小时前
项目中执行SQL报错oracle.jdbc.OracleDatabaseException: ORA-00942: 表或视图不存在
数据库·sql·oracle
The best are water14 小时前
jeesite mybatis添加拦截器,推送指定表的变更数据到其他数据库
数据库·mybatis
api_1800790546014 小时前
异步数据采集实践:用 Python/Node.js 构建高并发淘宝商品 API 调用引擎
大数据·开发语言·数据库·数据挖掘·node.js
怕什么真理无穷15 小时前
mysql server 9.4 windows安装教程(sqlyog 下载)
数据库
Olrookie15 小时前
MySQL运维常用SQL
运维·数据库·sql·mysql·dba
数据库生产实战15 小时前
ORACLE 19C ADG环境 如何快速删除1.8TB的分区表?有哪些注意事项?
数据库·oracle
blackorbird15 小时前
使用 Overpass Turbo 查找监控摄像头
运维·服务器·数据库·windows
IT永勇15 小时前
SQLite数据库基本操作
数据库·sqlite·嵌入式开发·增删改查·关系型数据库