1.凡事預則立不預則廢。。工作七八個月,接觸的全是Java,Java博大精深,到現在沒學好。自己反而完全和python隔離了,再不練練,估計要廢。
2.下載安裝pycharm社區版,因為免費,安裝Django框架,配置環境變量。
https://www.cnblogs.com/fanyuchen/p/6918735.html
由於我之前已經安裝好了 現在查看一下安裝目錄。
直接查看系統的環境變量 D:\software\nodejs\node_global;%MYSQL_HOME%\bin;D:\python_program\Lib\site-packages\django
可以看到最后一個為Django的安裝路徑。D:\python_program\Lib\site-packages\django
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>