门户网站建设方案公司,深圳做网站推广公司哪家好,app网站开发书籍下载,怎么申请公司web框架本质 socket 业务逻辑框架实现socket tonado node.js
使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket
路由系统
自己写逻辑#xff08;views#xff09;
jinja2 模板引擎(templates) 实现动态页面#xff0c;修改返回给浏览器的字符串
去…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 数据库拿数据 ORMModel
5 合在一起
6 使用 步骤 1 传过来的conn回传数据 install django and create a django project pip install django1.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 10register.simple_tagdef my_simple_time(v1,v2,v3):return v1 v2 v3register.simple_tagdef my_input(id,arg):result input typetext 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装饰类中新增 f1bookAdmin, request, querySet 是一个函数处理逻辑的定制显示颜色
在model中写一个函数返回style
在BookAdmin 装饰类中 list_display (f1) 数据库model 写classclass User(model)modes.CharField(maxlength32)modes.IntegerField()配置settings INSTALL_APPS创建数据库
python manage.py makemigrations
python manage.py migratecurd操作models.UserInfo.objects.create(username“yangli”, password123456)
models.UserInfo.objects.create(**dict)
obj models.UserInfo(usernameyangli2, password12345)
obj.save()models.UserInfo.objects.filter( ).delete()
models.UserInfo.objects.filter( ).update(password123) # 这种修改方式效率高models.UserInfo.objects.get(id1)
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(nameyangli)
models.UserInfo.objects.filter(name__exactyangli)
models.UserInfo.objects.filter(name__iexactyangli)
models.UserInfo.objects.filter(name__containsyangli)
models.UserInfo.objects.filter(name__icontainsyangli)
models.UserInfo.objects.filter(name__startswithyangli)
models.UserInfo.objects.filter(name__endswithyangli)
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__icontainstech)字段对比查询
from django.db.models import F
models.Entry.objects.filter(n_comments__gtF(n_pingbacks) * 2 )
models.Entry.objects.filter(mode_date__gt F(pub_date) timedelta(days3)) # 在发布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
nullTrue # 限制db
bankTrue # 限制django admin form
uniqTrue
defaultdefault
primary_keyTruetauto_now 当前时间创建的时候更新
auto_now_add 当前时间每次修改更新gender_choices ((0, female),(1,male),)
choicesgender_choicesvolidators []
upload_toupload # FileFiled() ImageField() 指定文件放在什么地方 数据库高级增删改查 content:在test.py通过 django API 操作数据库设置环境变量import osos.environ.setdefault(DJANGO_SETTINGS_MODULE, projectname.settings)import djangodjang.setup() 路由系统 直接路由包含跳转路由括号传参数定义别名 ?Pname字典传额外参数 模板 template 渲染模板 jianja2 把字典通过render()传给渲染模块 字典的value是object,在模板里面通过 . 来取对象的属性li [] dic {} user User(nameyangli, password123)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