1. 程式人生 > >Django 初識

Django 初識

template boot sockets os.path 應用 string static redirect ima

創建一個Django項目

切換到要創建的目錄下
Django-admin startproject mydjango(自定義名字)

啟動Django服務

python manage.py runserver 127.0.0.1:8000(可以不寫地址,有默認)

目錄結構

技術分享圖片

    - 下載安裝 pip install django
    - 創建項目 django-admin startproject mysite
               PyCharm創建項目 --> File->new project -> 左側選Django ->右側選項目存放路徑
    
- 目錄結構 -mysite -mysite -urls.py 配置對應關系 URL-->函數 -settings.py 配置文件 -wsgi.py socketserver -views.py 自己寫的函數統一放到這裏 __init__.py -templates 存放模板文件的(html文件) -index.html
-class_list.html -static -bootstrap -css -bootstrap.min.css -fonts -js -jQuery.3.2.1.min.js -manage.py 管理你Django項目的(有很多命令) python manage.py runserver IP:PORT

修改配置文件

技術分享圖片

在後面添加:

STATIC_URL = /static/
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),  # 靜態文件存放位置

技術分享圖片

新手三件套

from django.shortcuts import HttpResponse, render, redirect
    1. HttpResponse(‘ok‘) #直接返回文字
    2. render 渲染
        1. render(request, "xx.html")
        2. render(request, "xx.html", {"num": 123,‘list‘:[1,2,3]})  #給以給模板裏的變量傳值
    3. redirect(‘/login/‘)  跳轉到xx

模板語言

模板語言for循環:
    {% for teacher
        如果teacher_list in  teacher_list %}
        要做的事兒
    {% empty %}為空要做的事兒
    {% endfor %}
        
        
    {{ 變量名 }}    

if判斷       
    {% if %}  
   {% else %}
    {% endif %}

引用小組件
-{% include ‘nav.html‘ %}
繼承母板
-{% extends ‘base.html‘ %}

替換模版
  -{% block 名字 %}
    {% endblock %}

request & response

request的方法:
request.POST.get()     --> 取提交的數據裏面的參數
request.GET.get("key")      --> 取URL裏面的參數  "/login/?key=value"
request.POST.getlist() --> 提交的是列表的數據類型
request.get_full_path()--> 獲取請求的URL
request.method         --> 獲取具體的請求方法:GET/POST等
request.COOKIES.get()  --> 獲取具體的cookie值
                        
response響應的方法
response.set_cookie()
response.delete_cookie()

$.ajax 偷偷發送請求不刷新頁面

        $.ajax({
            url: "/URL/",
            type: "POST",
            data: {"name": "alex"},
            success: function(data){
                // data就是後端發過來的數據字符串
                // 前端做反序列化
                var dataObj = JSON.parse(data)  // 把收到的字符串反序列化成對象
                dataObj["status"]  // 就可以拿到具體的值
                dataObj.status    
            }
        })
        
    後端序列化:
        dic = {"status": 0, "msg": "哈哈"}
        import json
        str = json.dumps(dic)
        return HttpResponse(str)

JS的序列化與反序列化

JSON.parse(data)  #把收到的字符串反序列化成對象
JSON.stringify()  #把對象序列化成字符串


應用練習小題

# 第一題

list1 = [{"num": 1}, {"num": 3}, {"num": 5}, {"num": 7}]

# 如何把上面的列表轉換成下面的列表?

list2 = [1, 3, 5, 7]

tmp2 = [i["num"] for i in list1]
print(tmp2)



# 第二題

list3 = [
    {"name": "alex", "habit": "抽煙"},
    {"name": "alex", "habit": "喝酒"},
    {"name": "alex", "habit": "燙頭"},
    {"name": "alex", "habit": "Massage"},
    {"name": "egon", "habit": "喊麥"},
    {"name": "egon", "habit": "街舞"},
]
# 如何把上面的列表轉換成下方的列表?
list4 = [
    {"name": "alex", "habit_list": ["抽煙", "喝酒", "燙頭", "Massage"]},
    {"name": "egon", "habit_list": ["喊麥", "街舞"]},
]


list3_2 = {
    "alex": {"name": "alex", "habit": "抽煙", "habit_list": ["抽煙"]},
    "egon": {"name": "egon", "habit": "喊麥", "habit_list": ["喊麥", "街舞"]},
}

ret = {}
for i in list3:
    name = i["name"]  #alex
    if name not in ret:
        ret[name] = i  #"alex": {"name": "alex", "habit": "抽煙"}
        ret[name]["habit_list"] = [i["habit"], ]  #"alex": {"name": "alex", "habit": "抽煙", "habit_list": ["抽煙"]},
        ret[name].pop("habit") # {‘alex‘:{"name": "alex", "habit_list": ["抽煙", "喝酒", "燙頭", "Massage"]}}
    else:
        ret[name]["habit_list"].append(i["habit"])
print(ret)
print(list(ret.values())) 

# [
#     {"name": "alex", "habit_list": ["抽煙", "喝酒", "燙頭", "Massage"]},
#     {"name": "egon", "habit_list": ["喊麥", "街舞"]},
# ]

cookie

定義

            是保存在瀏覽器端的“鍵值對”      
            服務端可以在用戶瀏覽器寫Cookie   --->響應頭裏面會有 Set-Cookie
            登陸之後,
            瀏覽器每次發請求的時候會攜帶Cookie

用法

#往瀏覽器寫cookie

response = redirect(/student_list/)
response.set_cookie(login2,1,max_age=180)
return response

#獲取cookie

request.COOKIES.get(login2)  #可以if判斷有沒有

參數

            set_cookie的參數:        
                key,
                value=‘‘,
                max_age=None,   --> 超時時間  多少秒之後cookie失效
                expires=None,   --> 超時時間  具體時間cookie失效
                path=/,       --> URL  只往這個URL寫cookie
                
                ---↑上面的必須會
                
                domain=None,    --> 域名 只有這個域名能用
                secure=False,   --> 加密用的 Https
                httponly=False  --> JS代碼不能讀取cookie,只能瀏覽器發請求時攜帶cookie

        Cookie超時時間
            max_age=None,   --> 超時時間  多少秒之後cookie失效
            expires=None,   --> 超時時間  具體時間cookie失效

加言的cookie

        設置加鹽的Cookie
            response.set_signed_cookie("login2", "1", max_age=10, salt="PythonFullstackS7")
        
        獲取加密的Cookie:
            request.get_signed_cookie("login2", salt="PythonFullstackS7", default=None)
            
            要手動設置默認值,防止取值拋KeyError的異常

寫成裝飾器

技術分享圖片

Django 初識