1.凡事预则立不预则废。。工作七八个月,接触的全是Java,Java博大精深,到现在没学好。自己反而完全和python隔离了,再不练练,估计要废。
2.下载安装pycharm社区版,因为免费,安装Django框架,配置环境变量。
https://www.cnblogs.com/fanyuchen/p/6918735.html
由于我之前已经安装好了 现在查看一下安装目录。
直接查看系统的环境变量 D:software odejs ode_global;%MYSQL_HOME%in;D:python_programLibsite-packagesdjango
可以看到最后一个为Django的安装路径。D:python_programLibsite-packagesdjango
3.命令行新建Django项目。创建在D盘,对应项目名称为myproject_shopping。
但是在对应的目录下找不到此项目,
---------------------------------------------------------------------------------------------------------实战篇--------------------------------------------------------------------------------------
一、视图(包含函数视图和类视图)比较简单,不做赘述。
需要两个关键的类:urls和view
二、URL映射。
1.路径函数,path(route,view,kwargs,name)和re_path(route,view,kwargs,name)一个是正常匹配,一个是正则表达式匹配。
其中正则表达式,可进行分组,传参,传的参数,可以运用到视图函数中,可获取相应的视图。
2.正则表达式(正则表达式内容比较多,可以私下多看看)
3.路径转换器
路径中可以捕获路径中的数值,路径转换器可以将捕获的数值进行转换为有效参数,传递给函数视图。
urlpatterns = [
path('hello1/<str:name>/', views.hello1, name='hello'),
path('hello2/<slug:name>/', views.hello2),
path('hello3/<uuid:name>/', views.hello3),
path('hello4/<path:name>/', views.hello4),
path('<int:book_id>/', views.show_book_id),
]
预定义路径转换器:
str:匹配除路径分隔符(/)之外的任何非空字符串。
int:匹配零或任何正整数。返回一个int。
slug:匹配由ASCII字母或数字组成的任何字符串,然后这些字符串可以通过连字符(-)和下划线字符(_)连接。例如, building-your-1st-django-site。
uuid:匹配格式化的UUID。必须包含连字符(-),并且字母必须为小写。例如,075194d3-6885-417e-a8a8-6c931e272f00。
path:匹配任何非空字符串,包括路径分隔符(/)。
4.重定向
(1)站外重定向,访问站内的127.0.0.1;8080 可以返回项目外的一个链接。
通过在函数视图中,使用redirect函数返回,redirect函数返回一个应答对象。
示例(跨站重定向):
def hello(request):
return redirect('http://www.sina.com')
示例(网站内重定向):
5.模板。
一般情况下,一个项目只有一个settings,在相应的myproject目录下。当然,特殊情况下,某个应用服务下也可以有settings。
(1)注册Books应用。
在settings里面进行注册,books.apps.BooksConfig(books是它的包名,apps是模块名,BooksConfig是它的类名。)注册完以后,设置模板
2.Books应用模板设置。
myproject/settings.py修改TEMPLATES:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
],
},
},
]
BACKEND:设置采用哪个模板引擎。django.template.backends.django.DjangoTemplates(django自己的模板)和django.template.backends.jinja2.Jinja2(Jinja2模板)
DIRS:设置模板文件存储文件夹列表。
APP_DIRS:设置是否在应用中搜索模板文件。(true表示在当前应用中搜索模板文件。)
3.创建模板文件夹templates
1、没有使用模板
# 没有使用模板
def show_book_info1(request):
s = '''
<html>
<body>
<h3>书名:《Python从小白到大牛》</h3>
<h3>作者:关东升</h3>
</body>
</html>
'''
return HttpResponse(s)
2、使用模板
# 在函数视图中使用模板
def show_book_info2(request):
context = {'book_name': 'Python从小白到大牛', 'author': '关东升'}
return render(request, 'book.html', context)
# 类基础视图中使用模板
class MyView(TemplateView):
template_name = 'book.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['book_name'] = 'Python从小白到大牛'
context['author'] = '关东升'
return context
在函数视图中使用模板使用render,他是渲染函数,context是模板上下文。
在类基础视图中使用模板时,需要继承TemplateView父类,重写get_context_data方法。在template_name属性中指定模板名。
模板文件book.html:
<html>
<body>
<h3>书名:《{{ book_name }}》</h3>
<h3>作者:{{ author }}</h3>
</body>
</html>