这个是完整的博客系统,master代码是基于 Python3.6 和 Django2.0 开发。
也是《Django企业开发实战》图书和对应的一套视频的代码。
不同的载体和章节的内容分别在不同的分支中,你可以通过分支名来区分是视频还是图书,以及对应的章节,比如:
分支 book/05-initproject
就是对应的图书的第五章的代码,book/06-admin
就是对应的第六章的代码。
而对应的 chapter7
、chapter8
这样的是视频章节对应的代码。
Django企业开发实战对应项目代码
Home Page: http://django-practice-book.com/
License: Other
这个是完整的博客系统,master代码是基于 Python3.6 和 Django2.0 开发。
也是《Django企业开发实战》图书和对应的一套视频的代码。
不同的载体和章节的内容分别在不同的分支中,你可以通过分支名来区分是视频还是图书,以及对应的章节,比如:
分支 book/05-initproject
就是对应的图书的第五章的代码,book/06-admin
就是对应的第六章的代码。
而对应的 chapter7
、chapter8
这样的是视频章节对应的代码。
readme里写的是在book文件夹中
找不到book文件夹
老师您好,目前尝试使用Django开发一套企业官网,其中我想把首页作为一个纯展示页面,
结果遇到报错内容:
TemplateDoesNotExist at /hp
且对应路径报错提示:
Template-loader postmortem
Django tried loading these templates, in this order:
Using engine django:
项目中settings.py
#省略其他代码
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates/')], #(感觉这个BASE_DIR路径会不会要改写??)
'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',
],
},
},
]
#省略其他代码
INSTALLED_APPS = [
'article',
'case',
'config',(这个是app名称)
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
然后就出现了上面描述的错误,
如果老师方便的话,还请指导一下,
先谢过!
"在线上数据库中,我们一般会去掉外键约束,以提升性能"
请问这个是只需要这样设置就可以吗?
在setting设置
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
}
代码实验环境:
操作系统:Windows 10 专业版, 64bit
Python环境:anaconda 3, Python 3.7.6
书中代码:
if e.args[0] != errno.EAGAIN:
问题阐述:
经过实验验证,该exception返回的e.args[0] = 10035。
代码应修改为:
if e.args[0] != errno.EWOULDBLOCK:
书本前四章的源代码分支找不到了,只能看到第五章往后的源代码
求一份完整的能跑通的代码,我对比着看,我这边基本上敲完了,bug太多,跑不起来
from django.contrib import admin
from .models import Comment
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
list_display = ('traget','nickname','content','website','created_time')
按书上教程敲的代码。
到这里就报错了。。。
ERRORS:
<class 'comment.admin.CommentAdmin'>: (admin.E108) The value of 'list_display[0]' refers to 'traget', which is not a callable, an attribute of 'CommentAdmin', or an attribute or method on 'comment.Comment'.
我通过cmd命令python -m venv typeidea-env安装了虚拟环境,然后新建文件夹,新建Django并不会出现这几个文件,所以想问是不是我哪里错了,还是说这四个文件本来就是自己手动建立的。
当访问首页时,标签的标题没有显示为:首页 - typeidea 博客系统
1、修改base.html的代码:
<title>{% block title %}首页{% endblock %}- typeidea 博客系统</title>
修改为:
<title>{% block title %}{% endblock %}- typeidea 博客系统</title>
2、修改list.html代码:
{% block title %}
{% if tag %}
标签页:{{ tag.name }}
{% elif category %}
分类页:{{ category.name }}
{% endif %}
{% endblock %}
修改为:
{% block title %}
{% if tag %}
标签页:{{ tag.name }}
{% elif category %}
分类页:{{ category.name }}
{% else %}
首页
{% endif %}
{% endblock %}
书也买了,按照书里代码也敲了,就是各种模块不兼容
既然把源码放开了,为什么不把requirements好好整理一下呢
真是小气
Comment的视图函数代码如下:
comment/views.py:
from django.shortcuts import redirect
from django.views.generic import TemplateView
from .forms import CommentForm
class CommentView(TemplateView):
http_method_names = ['post']
template_name = 'comment/result.html'
def post(self, request, *args, **kwargs):
comment_form = CommentForm(request.POST)
target = request.POST.get('target')
content = request.POST.get('content') # 不知道为什么下面的content会加了p标签
print(content)
if comment_form.is_valid():
instance = comment_form.save(commit=False)
instance.target = target
print(instance.content)
instance.content = content # 重新赋值,去掉p标签
instance.save()
succeed = True
return redirect(target)
else:
succeed = False
context = {
'succeed': succeed,
'form': comment_form,
'target': target
}
return self.render_to_response(context)
上面的代码和作者书中的代码一样。只是在上面的代码中,分别打印了request.POST.get('content')和instance.content,奇怪的是:instance.content多了一个p标签,打印结果如下:
所以我在下面的代码重新给instance.content赋值,去掉p标签。
这是什么原因造成上面的结果呢???
typeidea/blog/views.py 第18行的super()的父类是哪个(super().get_context_data(**kwargs)),class CommonViewMixin 中好像没有传入父类
class CommonViewMixin:
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'sidebars': self.get_sidebars(),
})
context.update(self.get_navs())
return context
老师,您好:
作者这个字段是不能为空的,所以PostInline 这个类,定义完之后,如果直接编辑标题和摘要就提交是会报错,owner_id 不能为空的。
我想要提交的时候直接能够把当前用户提交上去,但是在这个admin.TabularInline父类中是没有关于save方法的。
说明:
config/blocks/sidebar_posts.html和config/blocks/sidebar_comments.html模板文件跟Model层封装的一样。
修改blog/views.py为:
from django.http import HttpResponse
from django.shortcuts import render
from django.template.loader import render_to_string
from config.models import SideBar
from .models import Post, Tag, Category
# Create your views here.
def post_list(request, category_id=None, tag_id=None):
category = None
tag = None
if tag_id:
post_list, tag = Post.get_by_tag(tag_id)
elif category_id:
post_list, category = Post.get_by_category(category_id)
else:
post_list = Post.latest_posts()
sidebars = []
for sidebar in SideBar.get_all():
if sidebar.display_type == SideBar.DISPLAY_HTML:
pass
elif sidebar.display_type == SideBar.DISPLAY_LATEST:
context = {
'posts': Post.latest_posts()
}
sidebar.content = render_to_string('config/blocks/sidebar_posts.html', context)
elif sidebar.display_type == SideBar.DISPLAY_HOT:
context = {
'posts': Post.hot_posts()
}
sidebar.content = render_to_string('config/blocks/sidebar_posts.html', context)
elif sidebar.display_type == SideBar.DISPLAY_COMMENT:
context = {
'comments': Comment.objects.filter(status=Comment.STATUS_NORMAL)
}
sidebar.content = render_to_string('config/blocks/sidebar_comments.html', context)
sidebars.append(sidebar)
context = {
'category': category,
'tag': tag,
'post_list': post_list,
'sidebars': sidebars,
}
context.update(Category.get_navs())
return render(request, 'blog/list.html', context=context)
def post_detail(request, post_id):
# return HttpResponse('detail')
try:
post = Post.objects.get(id=post_id)
except Post.DoesNotExist:
post = None
sidebars = []
for sidebar in SideBar.get_all():
if sidebar.display_type == SideBar.DISPLAY_HTML:
pass
elif sidebar.display_type == SideBar.DISPLAY_LATEST:
context = {
'posts': Post.latest_posts()
}
sidebar.content = render_to_string('config/blocks/sidebar_posts.html', context)
elif sidebar.display_type == SideBar.DISPLAY_HOT:
context = {
'posts': Post.hot_posts()
}
sidebar.content = render_to_string('config/blocks/sidebar_posts.html', context)
elif sidebar.display_type == SideBar.DISPLAY_COMMENT:
context = {
'comments': Comment.objects.filter(status=Comment.STATUS_NORMAL)
}
sidebar.content = render_to_string('config/blocks/sidebar_comments.html', context)
sidebars.append(sidebar)
context = {
'post': post,
'sidebars': sidebars,
}
context.update(Category.get_navs())
return render(request, 'blog/detail.html', context=context)
上面代码在view中通过判断sidebar.display_type的类型来设置sidebar.content,在list.html和detail.html中还是调用sidebar.content.
老师,按照您写的书编写到6.2根据需求定制admin时,在admin界面点击文章时报错,错误是:
Cannot resolve keyword 'id' into field. Choices are: created_time, is_nav, name, owner, owner_id, post, status。
请问这是什么原因导致的?
按照需求定制admin,修改了119页内容后(blog/admin.py中list_filter=[CategoryOwnerFilter]上述内容已全部修改),运行报错,具体报错内容为:“class CategoryOwnerFilter(admin.SimpleListFilter):
File "/opt/anaconda3/lib/python3.7/site-packages/django/contrib/admin/decorators.py", line 25, in _model_admin_wrapper
raise ValueError('Wrapped class must subclass ModelAdmin.')
ValueError: Wrapped class must subclass ModelAdmin.“
是否和为本地配置的环境有关,有劳作者方便的时候,抽空指导一下,这个问题在其他论坛,未能成功找到解决办法,如能获得您的回复,不胜感激!!
按第9章完善完 PostDetailView后就报这个错'PostDetailView' object has no attribute 'object'
问题出在哪里,希望老师指点
`class PostDetailView(CommonViewMixin, DetailView):
queryset = Post.latest_posts()
template_name = 'blog/detail.html'
context_object_name = 'post'
pk_url_kwarg = 'post_id'
def get(self, request, *args, **kwargs):
response = super().get(request, *args, **kwargs)
self.handle_visited()
return response
def handle_visited(self):
increase_pv = False
increase_uv = False
uid = self.request.uid
pv_key = 'pv:%s:%s' % (uid, self.request.path)
if not cache.get(pv_key):
increase_pv = True
cache.set(pv_key, 1, 1 * 60) # 1分钟有效
uv_key = 'uv:%s:%s:%s' % (uid, str(date.today()), self.request.path)
if not cache.get(uv_key):
increase_uv = True
cache.set(uv_key, 1, 24 * 60 * 60) # 24小时有效
if increase_pv and increase_uv:
Post.objects.filter(pk=self.object.id).update(pv=F('pv') + 1, uv=F('uv') + 1)
elif increase_pv:
Post.objects.filter(pk=self.object.id).update(pv=F('pv') + 1)
elif increase_uv:
Post.objects.filter(pk=self.object.id).update(uv=F('uv') + 1)`
`
您好,有几个疑惑请教下:
1、blog/admin中的PostAdmin类下,save_on_top出现了两次,是否是重复冗余的代码?
2、blog/admin中的PostAdmin类下,exclude = ['owner',],这行代码在基类BaseOwnerAdmin中已经提取,这里的是否可以去除?
3、书中P122页的filter_vertical或者filter_horizontal的字段写成tags了,应该是tag的
4、我在PostAdmin引用自定义Form的时候,抛异常,显示自定义的Form没有指明Model,我指明了相关的Model之后,才能正常运行,但是我看您的代码是不用指明的,跟着您的代码重敲了一遍之后又可以了。所以有个问题,自定义Form的Model不用指明是因为装饰器已经把admin和Model和Form三个绑定在一起了吗?
似乎应该将list.html里的
for tag in post.tags
改为
for tag in post.tag.all
第5.1.2节,git怎么配置settings,拆成文件夹?
老师,又来请教静态文件相关问题。
目前框架信息:
1.Django 版本3.0.1;
2.使用static方法管理静态文件,大部分页面可以正确加载;
问题描述:
部分页面使用css引用图片文件时,web前段html中无法正确加载,
问题应该是在css中关于文件路径的写法上。
html前端片段:
#省略其他代码
index.css文件片段:
.business_area .slide_list .li1{
background: {% static ‘对应文件路径’%} no-repeat top;background-size: cover;
}
.business_area .slide_list .li2{
background: url(../img/sections/section-2.jpg) no-repeat top;background-size: cover;
}
.business_area .slide_list .li3{
background: url(../img/sections/section-11.jpg) no-repeat top;background-size: cover;
}
这种情况下引用文件无法正确加载,请教老师css中如何正确描述这种图片文件路径?
还是说只能全部写html前端文件里面用{% static ‘文件路径’%}来引用呢?
Linux Python3 环境下,Clone deploy-to-cloud 分支的代码,运行 python setup.py install
,出现以下报错:
Searching for xadmin==2.0.1
Reading http://mirrors.tencentyun.com/pypi/simple/xadmin/
No local packages or working download links found for xadmin==2.0.1
error: Could not find suitable distribution for Requirement.parse('xadmin==2.0.1')
搜索到的解决方法为:用 pip install git+git://github.com/sshwsfc/xadmin.git@django2
安装 xadmin,但在我自己的云服务器上,安装速度极慢。是否有其他的解决方法呢?望解答 ,谢谢
系统环境:
Windows 10专业版, 64bit
python 3.7.4
Django 1.11.29
django-debug-toolbar 1.9.1
djdt-flamegraph 0.2.12
在Windows系统上使用djdt-flamegraph插件的时候,会报以下错误:
AttributeError: module 'signal' has no attribute 'SIGALRM'
这是因为在djdt-flamegraph插件的代码里面用到了 module 'signal'的SIGALRM属性 ,
但是在Windows系统上的 module 'signal'没有SIGALRM属性,所以才会报错。
因此,djdt-flamegraph插件暂不支持在Windows系统中使用,但是在Linux中可以正常使用(在MAC上没有测试过)。
官方github:https://github.com/23andMe/djdt-flamegraph 上也有说明:
需要实现带tag的文章列表,是把tag 的name冗余到Post中,比如
tags = JSONField(blank=True, default=[])
有没有更好的方法?
我使用win10+python3.7
在安装依赖库的时候出现了问题,supervisor==4.0.0dev0(不存在,另外supervisor不支持python3)
本地测试环境,allowed hosts已经设置为"['*']"
silk的问题
老师,您好,我在分离settings.py文件时,启动提示这个错了,麻烦帮我看看。
Traceback (most recent call last):
File "E:/MyDjanoProject/typeidea/manage.py", line 23, in
main()
File "E:/MyDjanoProject/typeidea/manage.py", line 19, in main
execute_from_command_line(sys.argv)
File "D:\Python38-32\lib\site-packages\django\core\management_init_.py", line 401, in execute_from_command_line
utility.execute()
File "D:\Python38-32\lib\site-packages\django\core\management_init_.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "D:\Python38-32\lib\site-packages\django\core\management\base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "D:\Python38-32\lib\site-packages\django\core\management\commands\runserver.py", line 60, in execute
super().execute(*args, **options)
File "D:\Python38-32\lib\site-packages\django\core\management\base.py", line 369, in execute
output = self.handle(*args, **options)
File "D:\Python38-32\lib\site-packages\django\core\management\commands\runserver.py", line 67, in handle
if not settings.DEBUG and not settings.ALLOWED_HOSTS:
File "D:\Python38-32\lib\site-packages\django\conf_init_.py", line 76, in getattr
self.setup(name)
File "D:\Python38-32\lib\site-packages\django\conf_init.py", line 63, in _setup
self.wrapped = Settings(settings_module)
File "D:\Python38-32\lib\site-packages\django\conf_init.py", line 161, in init
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
项目已上传到github ,环境是py3.8+django3.0
你按书上的代码敲完之后,重新运行程序,当你在分类编辑页添加新的文章,保存的时候会提示以下错误:
NOT NULL constraint failed: blog_post.owner_id*
这是因为post的owner字段还没有赋值,但是该字段声明的时候设置为Not Null。
解决办法:
在CategoryAdmin中添加以下函数代码:
def save_formset(self, request, form, formset, change):
""" 修改关联对象数据 """
instances = formset.save(commit=False)
for instance in instances:
if not hasattr(instance, 'owner'): # 防止误修改其他文章的作者
instance.owner = request.user # 给owner字段赋值
instance.save()
formset.save_m2m()
在save_formset()函数中,可以修改关联对象post中的字段。
多说一句,在PostInline 要把你要编辑的Post字段要设置显示出来,
fields = (
'title',
'desc',
'status',
'content',
'tag',
)
这里设置的就是你要在Category编辑页中显示Post要编辑的字段。
其中post的 'category'字段不需要设置,,它默认的值就是你当前编辑的分类。
您好,买了您的书,学习到7.5升级至 class-base view时出现了下面的报错,
查看了您的代码,感觉跟我的并没有太大差异,好几天了没找到问题,烦请赐教,感激不尽,谢谢
Request Method: | GET |
---|---|
http://127.0.0.1:8000/ | |
2.2.1 | |
ImproperlyConfigured | |
IndexView is missing a QuerySet. Define IndexView.model, IndexView.queryset, or override IndexView.get_queryset(). | |
D:\python36\lib\site-packages\django\views\generic\list.py in get_queryset, line 39 | |
D:\python36\python.exe | |
3.6.7 | |
['E:\django_prj\typeidea\typeidea', 'D:\python36\python36.zip', 'D:\python36\DLLs', 'D:\python36\lib', 'D:\python36', 'D:\python36\lib\site-packages'] | |
Wed, 22 May 2019 22:37:17 +0800 |
你好,请问这个问题可能由哪些原因造成?
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/blog/post/add/?_to_field=id&_popup=1
Django Version: 1.11.20
Exception Type: TypeError
Exception Value:
'User' object is not iterable
Exception Location: /home/pan/桌面/typeidea-env/lib/python3.6/site-packages/django/utils/functional.py in inner, line 239
Python Executable: /home/pan/桌面/typeidea-env/bin/python
Python Version: 3.6.7
Python Path:
['/home/pan/桌面/typeidea/typeidea',
'/usr/lib/python36.zip',
'/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload',
'/home/pan/桌面/typeidea-env/lib/python3.6/site-packages']
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
.
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── init.py
│ ├── migrations
│ │ └── init.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── comment
│ ├── admin.py
│ ├── apps.py
│ ├── init.py
│ ├── migrations
│ │ └── init.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── config
│ ├── admin.py
│ ├── apps.py
│ ├── init.py
│ ├── migrations
│ │ └── init.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
└── typeidea
├── init.py
├── pycache
│ ├── init.cpython-36.pyc
│ ├── settings.cpython-36.pyc
│ ├── urls.cpython-36.pyc
│ └── wsgi.cpython-36.pyc
├── settings
│ ├── base.py
│ ├── develop.py
│ ├── init.py
│ └── pycache
│ └── init.cpython-36.pyc
├── urls.py
└── wsgi.py
有生成db.sqlite3
书中最新评论的模板代码如下:
<ul>
{% for comment in comments %}
<li><a href="{{ comment.target }}">{{ comment.target.title }}</a> |
{{ comment.nickname }} : {{ comment.content }}
</li>
{% endfor %}
</ul>
因为此时的 comment.target 里面的数据是评论目标页面的绝对路径如:
/post/19.html
所以此时的comment.target.title需要进行修改,应该修改为评论目标文章的标题。
修改参考思路:
在我的项目中,是给comment增加了一个新的字段target_title用于存储评论目标文章的标题。
(1)在comment/models.py中添加字段:
target_title = models.CharField(max_length=255, verbose_name='评论目标的标题')
(2)运行:
python manage.py makemigrations
python manage.py migrate
更新数据库。此时,命令行可能提示Comment模型对应的表已经存在评论记录了,这是你们之前评论时产生的记录存储在数据库中了。这时,你可以把之前的评论记录删掉,再运行以上代码,或者按照命令行提示给之前的评论记录输入默认的值。
(3)更改自定义标签,增加多一个参数target_title:
comment/templatetags/comment_block.py
from django import template
from comment.forms import CommentForm
from comment.models import Comment
register = template.Library()
@register.inclusion_tag('comment/block.html')
def comment_block(target, target_title):
return {
'target': target,
'target_title': target_title,
'comment_form': CommentForm(),
'comment_list': Comment.get_by_target(target)
}
(4)修改block.html模板文件:
typeidea\themes\bootstrap\templates\comment\block.html:
<hr/>
<div class="comment">
<form class="form-group" action="/comment/" method="POST">
{% csrf_token %}
<input name="target" type="hidden" value="{{ target }}"/>
<input name="target_title" type="hidden" value="{{ target_title }}"/>
{{ comment_form }}
<input type="submit" value="submit">
</form>
<!--评论列表-->
<ul class="list-group">
{% for comment in comment_list %}
<li class="list-group-item">
<div class="nickname">
<a href="{{ comment.website }}">{{ comment.nickname }}</a>
<span>{{ comment.created_time}}</span>
</div>
<div class="comment-content">
{{ comment.content }}
</div>
</li>
{% endfor %}
</ul>
</div>
只是增加一个input标签,用于给target_title字段赋值。
<input name="target_title" type="hidden" value="{{ target_title }}"/>
(5)修改模板标签中对评论的引用:
detail.html:
{% comment_block request.path post.title %}
links.html:
{% comment_block request.path "友情链接" %}
(6)修改sidebar_comments.html模板文件:
<ul>
{% for comment in comments %}
<li><a href="{{ comment.target }}">{{ comment.target_title |slice:"20"|add:"..." }}</a> |
{{ comment.nickname }} : {{ comment.content }}
</li>
{% endfor %}
</ul>
在这里就可以获取到评论目标的标题comment.target_title了。
在此,只是截取标题的前20个字符,并拼接"..."字符串作为结尾。
class IndexView(CommonViewMixin, ListView):
queryset = Post.latest_posts()
paginate_by = 5
context_object_name = 'post_list'
template_name = 'blog/list.html'
这样写会报错:
django.core.exceptions.ImproperlyConfigured: IndexView is missing a QuerySet. Define IndexView.model, IndexView.queryset, or override IndexView.get_queryset().
需要加个 model = Post 就好了。
作者你好,我在写完12章的代码后,运行程序,编辑文章时,发现无法选择标签和分类,以下时错误反馈
Response to request with pk 2a2983f1-6dad-472b-a6eb-29542c2af75a has content type text/javascript but was unable to parse it
[19/Jun/2019 06:54:21] "GET /admin/jsi18n/ HTTP/1.1" 200 7722
Django版本的问题
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = [
'title','category','status',
'created_time','operator'
]
list_display_links = []
list_filter = ['category',]
search_fields = ['title','category__name']
actions_on_top = True
actions_on_bottom = True
save_on_top = True
fields = (
('category','title'),
'desc',
'status',
'content',
'tag',
)
def operator(self,obj):
return format_html(
'编辑',
reverse('admin:blog_post_change',args=(obj.id,))
)
operator.short_description = '操作'
def save_model(self, request, obj, form, change):
obj.owner = request.user
return super(PostAdmin, self).save_model(request,obj,form,change)
报错:django.core.exceptions.FieldError: Unknown field(s) (content) specified for Post. Check fields/fieldsets/exclude attributes of class PostAdmin.
求大神帮我看看吧。。。。
?: (urls.E007) The custom handler500 view 'blog.views.Handler50x' does not take the correct number of arguments (request).
第六章内联分类里的文章后面有一个删除的checkbox,点击后没有反应,怎么才能点击后让他删除呢?谢谢
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.