python web django base skill

web框架本質

socket + 業務邏輯框架實現socket      tonado  node.js
使用WSGI實現socket  django flask

自己實現框架思路

wsgiref socket
路由系統
自己寫邏輯(views)
jinja2  模板引擎(templates) 實現動態頁面,修改返回給瀏覽器的字符串
去db取數據(models)

web框架流程

流程:  wsgi --> 路由系統 -- views(核心邏輯) --- template(拿html) --- )db  (model)1 用戶請求到wsgiwsgi整理用戶請求env,加上一個返回數據的conn,傳給后面路由系統
2 請求到路由系統
3 請求到view, 核心邏輯
3 tpl 拿模板     模板引擎 jinja2
4 數據庫拿數據  ORM(Model)
5 合在一起
6 使用 步驟 1 傳過來的conn,回傳數據

install django and create a django project

pip install django=1.9.5
django-admin startproject my_site  創建工程
cd mysite
python manage.py startapp monitor       創建APP
python manage.py startapp cmdb          創建APP1
python manage.py runserver 0.0.0.0:9999這幾條命令然并卵,可以在pycharm上面圖形化操作

來吧,開始django吧

全局配置

一般一看就明白,添加一個新的
STATICFILES_DIRS = ( os.path.join(BASE_DIV, "statics"), ) js css img放在這里

后臺管理manage.py 命令

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser   # 創建超級用戶管理后臺
python manage.py shell在settings 里面配置數據庫引擎

路由系統 urls

普通         (r"^/index/", vews.index),
動態傳參數    (r"^/index/(\d+)", vews.index),
路由分發      (r"^/index/", include("appname.urls")),

template 模板

取值
list dict object 通過.來取值
li = [1,2,3]
dic = {"k1":"v1", "k2":"v2"}
{{ k1 }}
{{ li.0 }}
{{ dic.k1 }}邏輯控制
{% for item in data %}{{ item }}{{ forloop.counter }}  特殊變量 索引{{ forloop.first }}  特殊變量  是否是第一個{{ forloop.last }}  特殊變量   是否是最后一個
{% endfor %}{% if 1 == 1%}
{% else %}
{% endif %}母版定義{% block blockname %}{% endblock %}使用:{% extend "front/xx.html" %}經驗:一般會定義4個blocktitle  css content js  子html在繼承的時候一般都是修改這幾塊導入直接導入一個小的元素{% include "front_app/ss.html" %}內置函數自定義函數  -- 然并卵,直接在python中做,不就行了分類:filter 只能穿一個參數      支持if的條件,通過管道simple_tag 可以穿多個參數  不支持if的 條件settings中注冊APP在APP里面創建templatetags創建任意py文件,在里面寫函數from django import templatefrom django.utils.safestring import mark_safefrom django.template.base import resolve_variable, Node, TemplateSyntaxErrorregister = template.Library()  # 這個名字不能改@register.filterdef plus_10(arg):return arg + 10@register.simple_tagdef my_simple_time(v1,v2,v3):return  v1 + v2 + v3@register.simple_tagdef my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result)使用:{% load xx %}  先導入{% k1|f1 %}{% my_simple_time 1 2 3%}  在使用,后面是參數{% my_input 'id_username' 'hide'%}

簡單數據庫管理

基本說明

class注冊admin
admin.site.register(CLASS)def __str__():   為了讓現實好看,在model下面覆蓋此方法
有個admin的頁面可以使用,簡單的數據庫管理后臺

定制admin界面

寫一個定制類,繼承 admin.ModelAdmin
class BookAdmin(admin.ModelAdmin):list_display = ('name', 'publisher', 'publish_date')list_filter = ('publisher', 'publish_date')list_editable = ('name', 'publish_date')list_per_page = 10 # 每頁顯示多少list_selected_related = ()serach_fields = ('name', 'publish__name')  # __ is magic# 定制詳細頁面filter_horizontal = ('authors', )  # 針對多對多 Manytomanyraw_id_filds = ('publisher', )  # 針對ForeignKey國內有一個xadmin ,深度定制admin,效果很棒定制admin action
actions = [f1, ]  # 在BookAdmin裝飾類中新增,  f1(bookAdmin, request, querySet) 是一個函數,處理邏輯的定制顯示顏色
在model中寫一個函數,返回style
在BookAdmin 裝飾類中 list_display = (f1)

數據庫model

寫classclass User(model)modes.CharField(maxlength=32)modes.IntegerField()配置settings    INSTALL_APPS創建數據庫
python manage.py makemigrations
python manage.py migratecurd操作models.UserInfo.objects.create(username=“yangli”, password="123456")
models.UserInfo.objects.create(**dict)
obj = models.UserInfo(username="yangli2", password="12345")
obj.save()models.UserInfo.objects.filter(   ).delete()
models.UserInfo.objects.filter(  ).update(password="123")  # 這種修改方式效率高models.UserInfo.objects.get(id=1)
models.UserInfo.objects.filter(  ).all()
models.UserInfo.objects.filter(  ).all().values(id,email)     # 字典
models.UserInfo.objects.filter(  ).all().value_list(id,imail)  # list and tuple
models.UserInfo.objects.filter(  ).first()   last()
models.UserInfo.objects.filter(name="yangli")
models.UserInfo.objects.filter(name__exact="yangli")
models.UserInfo.objects.filter(name__iexact="yangli")
models.UserInfo.objects.filter(name__contains="yangli")
models.UserInfo.objects.filter(name__icontains="yangli")
models.UserInfo.objects.filter(name__startswith="yangli")
models.UserInfo.objects.filter(name__endswith="yangli")
models.UserInfo.objects.filter(name__range=[1, 3]).order_by("-name")  # 排序
models.UserInfo.objects.all()[0:2]連表查詢
# __ is magic, 可以作用于外鍵的屬性
models.Entry.objects.filter(blog__name__contains="科技模塊")
models.Entry.objects.filter(blog__name__icontains="tech")字段對比查詢
from django.db.models import F
models.Entry.objects.filter(n_comments__gt=F('n_pingbacks') * 2 )
models.Entry.objects.filter(mode_date__gt = F('pub_date') + timedelta(days=3))  # 在發布3天后修改的所有實體添加有關聯的表格:
book -- publisher   one-to-one
book -- authors     many-to-many
new_book = Book(title = "learn python to Alex",publish_id = publish_id   # class 中沒有publish_id,但是可以這么用,不用傳一個對象# authors 是一個多對多的關系,先保存再添加
)
new_book.save()
new_book.authors.add(1,2,3)
new_book.authors.add(*authors_ids)返回動態數據給頁面
render(request, "t1.tpl", {"li":users_list})注意配置模板的路徑當使用post提交數據的時候,暫時先注釋settings里面的csrf常用的數據庫字段和屬性類型:
https://docs.djangoproject.com/en/1.10/ref/models/fields/#primary-keyIntegerField()   FloatField()
CharField()  TextField()
DateField()
EmailField()
TimeField()
ImageField()  FieldPathFiled()  # 數據庫里面存的是路徑,django admin 提供直接上傳的功能Filed option
null=True  # 限制db
bank=True  # 限制django admin form
uniq=True
default="default"
primary_key=Truetauto_now      當前時間,創建的時候更新
auto_now_add  當前時間,每次修改更新gender_choices = ((0, "female"),(1,"male"),)
choices=gender_choicesvolidators = []
upload_to="upload"  # FileFiled() ImageField()  指定文件放在什么地方

數據庫高級增刪改查

content:在test.py通過 django API  操作數據庫設置環境變量import osos.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectname.settings")import djangodjang.setup()

路由系統

    直接路由包含跳轉路由括號傳參數定義別名  ?P<name>字典傳額外參數

模板 template

渲染模板 jianja2

    把字典通過render()傳給渲染模塊, 字典的value是object,在模板里面通過 . 來取對象的屬性li = []  dic = {}  user = User(name="yangli", password="123")li.1 dic.k1  user.name  user.password常見語法:{% for item in objs %}{{  item }}{% endfor %}{% if forloop.count0|divisibleby:"2" %}{% else %}{% endif %}模板小結:沒有while循環,因為while循環可能是死循環,這個后端不能夠有這個模板中不能夠設置變量當模板中使用了一個變量,render并沒有傳過來的時候,并不會報錯,僅僅留空

模板繼承

    父親:自定允許修改的塊{% block name %}{% endblock %}兒子:{% extend "path" %}  # 兒子繼承一個父類{% block name %}  # 在這里重寫父親的塊{% endblock %}# include 這個插件{% include "app01/registor.html" %}繼承小結:模板繼承可以嵌套,父親和爺爺輩的都可以重寫模板繼承不能多繼承

前端 frontend html css js jQuery ajax6

轉載于:https://www.cnblogs.com/yangliw3/p/5989108.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270661.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦常見的VGA、DVI、PS/2、USB等接口知識筆記

我們經常見到電腦和網絡設備上都少不了VGA、DVI、PS/2、USB等常用接口&#xff0c;那些接口里面有多個針腳&#xff0c;他們每個針腳都有自己的用途&#xff0c;今天電腦學習小編就帶大家一起看看這些接口神秘用途。 現在很多朋友們可能會遇到VGA線或HDMI線不夠長&#xff0c;或…

mysql kill_Mysql使用kill命令解決死鎖問題(殺死某條正在執行的sql語句)

在使用mysql運行某些語句時&#xff0c;會因數據量太大而導致死鎖&#xff0c;沒有反映。這個時候&#xff0c;就需要kill掉某個正在消耗資源的query語句即可&#xff0c; KILL命令的語法格式如下&#xff1a;KILL [CONNECTION | QUERY] thread_id每個與mysqld的連接都在一個獨…

數據庫:MySQL、HBase、ElasticSearch三者對比

1、概念介紹 MySQL&#xff1a;關系型數據庫&#xff0c;主要面向OLTP&#xff0c;支持事務&#xff0c;支持二級索引&#xff0c;支持sql&#xff0c;支持主從、Group Replication架構模型&#xff08;本文全部以Innodb為例&#xff0c;不涉及別的存儲引擎&#xff09;。 HBas…

mysql 附加數據庫文件_mysql附加數據庫文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航&#xff0c;為用戶…

SpringBoot集成Mybatis用法筆記

今天給大家整理SpringBoot集成Mybatis用法筆記。希望對大家能有所幫助&#xff01;搭建一個SpringBoot基礎項目。具體可以參考SpringBoot:搭建第一個Web程序引入相關依賴<dependencies><dependency><groupId>org.springframework.boot</groupId><ar…

wifi-mac

//18:a6:f7:12:0b:8b //18:a6:f7:1e:a9:57 //18:a6:f7:1f:8e:69 //18:a6:f7:12:0b:9c //18:a6:f7:1f:cd:d4 //18:a6:f7:1c:94:35 轉載于:https://www.cnblogs.com/mayidudu/p/5991781.html

網絡知識:交換機中的半雙工與全雙工知識筆記

今天小編給大家分享一下交換機中半雙工與全雙工相關知識&#xff0c;希望對大家能有所幫助&#xff01; 早期的網絡設備HUB&#xff08;集線器&#xff09;就是半雙工&#xff0c;目前基本沒有人用了&#xff0c;而現在用的SWITCH&#xff08;交換機&#xff09;就是全雙工。 a…

yum 安裝mysql 啟動_linux(centos6.9)下使用yum安裝mysql,及啟動MySQL等

查看系統自帶的mysql版本&#xff1a;rpm -qa | grep mysql卸載mysql&#xff1a;rpm -e mysql-libs-5.1.73-8.el6_8.x86_64 --nodeps1. 安裝mysql 服務器端&#xff1a;yum -y install mysql-server mysql-devel2. 安裝mysql客戶端&#xff1a;yum install mysql3. 啟動mysql服…

硬件知識:U盤插入電腦沒反應相關解決辦法整理

目錄 一、U盤可能被隱藏 二、USB端口被BIOS禁用 三、電腦的USB驅動可能有問題 今天小編給大家介紹一下U盤插入電腦沒反應相應的解決方案&#xff0c;希望對大家能有所幫助&#xff01; 一、U盤可能被隱藏 首先換臺電腦看看是不是U盤損壞的問題&#xff0c;如果不是&#xff0c;…

分享9個實用的電腦維修技巧,趕緊收藏吧

目錄 01、電腦不能上網 02、電腦藍屏 03、沒有聲音 04、沒有畫面 05、軟件無法啟動 06、顯示器畫面不能滿屏顯示 07、使用過程中自動關機 08、電腦不能開機 09、電腦花屏 今天給大家分享9個實用的電腦維修技巧&#xff0c;趕緊收藏吧&#xff01; 01、電腦不能上網 常見原因1&a…

自媒體資源:分享8個免版權視頻素材網站

目錄 01. 知魚素材 2、 gaiamount 3、 lifeofvids 4、Coverr 5、stock footage 6、vidsplay 7、Pixabay 8、Pexels 今天小編就給大家分享一些免版權的視頻素材網站&#xff0c;有需要的小伙伴趕緊歡迎收藏&#xff01; 01. 知魚素材 https://sucai.zhiyu.art/video 共享協議可免…

win7 mysql msi_windows下的Mysql安裝與基本使用(msi)

本文針對mysql5.6與5.5一、其他版本與安裝方式1.msi(mysql5.7及以上版本參考&#xff1a;https://www.cnblogs.com/zjiacun/p/6653891.html)這里我們用msi吧&#xff0c;只是單純練習的話&#xff0c;簡單很多二、msi安裝(5.5-5.6)1.點擊安裝文件&#xff0c;在出現的安裝向導上…

java中split以“.“ 、“\“、“|”分隔

今天項目里遇到以"." 、"\"、“|”分割字符串&#xff0c;直接用"." 、"\"、“|”無法分割&#xff0c;因為"." 、"\"、“|”是特殊字符&#xff0c;需要轉義&#xff0c;"\\." 、"\\\"、“\…

推薦這11款免費好用的 Mac 軟件

目錄 1、IINA —— 全能視頻播放器 02、大拍檔剪輯助手 03、Dozer 04、Cheatsheet 05、Spectacle 06、Amphetamine 07、Macs Fan Control 08、AdGuard 09、Keka 10、騰訊檸檬清理 11、Cold Turkey Blocker 1、IINA —— 全能視頻播放器 對于Mac OS來說&#xff0c;IINA可以說是…

三角形

源代碼&#xff1a;#include<cstdio> #include<map> #define LL long long#define INF 1000000000 using namespace std; map <double,LL> i; //這個STL差不多就是一個反類型數組。 double f[100001]; LL n,Num(0); LL C(LL N,LL M) //排列組合。 {if (N<…

物理機存放mysql實例原則_MySQL優化筆記(四)--表的設計與優化(單表、多表)...

前面講了SQL優化以及索引的使用、設計優化了&#xff0c;那么接下來就到表的設計與優化啦&#xff01;&#xff01;&#xff01;真實地去設計優化單表結構以及講述多表設計基本原則(結合真實的生產環境的取舍來講述)。文章結構&#xff1a;(1)單表設計與優化&#xff1b;(2)基于…

電腦維修:電腦維修必備工具整理

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

iOS appstore分級

我在周五晚上十點多的時候上傳ipa到App Store&#xff0c;周六凌晨二點多就收到審核信息&#xff08;這是Apple嗎&#xff0c;審核速度我就不敢相信&#xff09;&#xff0c;然后收到他們的郵件&#xff0c; 大概意思就是你的app可以銷售了&#xff0c;大概要等24小時能在App S…