You need to create a file named .gitattributes in the root folder of my repository.
Use this source code to tell GitHub is a python project:
* linguist-vendored
*.py linguist-vendored=false
Now the project will be target with python language.
Is a blog about python programming language. You can see my work with python programming language, tutorials and news.
* linguist-vendored
*.py linguist-vendored=false
Now the project will be target with python language.
[mythcat@desk django]$ source env/bin/activate
I update my django version 3.0 up to 3.0.1.(env) [mythcat@desk django]$ pip3 install --upgrade django --user
Collecting django
...
Successfully uninstalled Django-3.0
Successfully installed django-3.0.1
The next step comes with installation of Python modules for Django and Django REST:(env) [mythcat@desk django]$ pip3 install djangorestframework --user
Collecting djangorestframework
...
Installing collected packages: djangorestframework
Successfully installed djangorestframework-3.11.0
Into my folder mysite I run this commands(env) [mythcat@desk django]$ cd mysite/
(env) [mythcat@desk mysite]$ python3 manage.py makemigrations
No changes detected
(env) [mythcat@desk mysite]$ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, test001
Running migrations:
No migrations to apply.
To pass information over to an HTTP GET request, the information object must be translated into valid response data.(env) [mythcat@desk mysite]$ cd mysite/
(env) [mythcat@desk mysite]$ vim serializers.py
The code for this python script is this:from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
The next changes will be on urls.py and views.py.from django.contrib import admin
from django.urls import path
from test001.views import home_page
from test001.views import Test001ChartView
#
from django.urls import include, path
from rest_framework import routers
from test001 import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
app_name = 'test001'
urlpatterns = [
path('admin/', admin.site.urls),
#path('', home_page, name ='home'),
path('', Test001ChartView.as_view(), name = 'home'),
# Use automatic URL routing
# Can also include login URLs for the browsable API
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
My views.py file is this:from django.http import HttpResponse
from django.shortcuts import render
# snippet
from django.shortcuts import get_object_or_404
# for chart
from django.views.generic import TemplateView
from .models import Test001, Snippet
#
#def home_page(request):
# return HttpResponse('Home page!')
# django framework
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from mysite.serializers import UserSerializer, GroupSerializer
def home_page(request):
return render(request, 'test001/home.html',{
'name':'CGF',
'html_items': ['a','b','c','d','e']
})
# define view for chart
class Test001ChartView(TemplateView):
template_name = 'test001/chart.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["qs"] = Test001.objects.all()
return context
def snippet_detail(request, id):
snippet = get_object_or_404(Snippet, id=id)
return render(request, 'test001/snippets_detail.html', {'snippet': snippet})
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
The settings module for this my project is stored in mysite/settings.py and I add this:INSTALLED_APPS = [
...
'rest_framework',
]
I run the django project and works well:python3 manage.py runserver
The http://127.0.0.1:8000/users/ page come with this output:[mythcat@desk ~]$ pip3 install --upgrade PyQt5 --user
Collecting PyQt5
...
Installing collected packages: PyQt5-sip, PyQt5
Successfully installed PyQt5-5.14.0 PyQt5-sip-12.7.0
Let's see how can see the version:[mythcat@desk ~]$ python3
Python 3.7.5 (default, Dec 15 2019, 17:54:26)
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from PyQt5.Qt import PYQT_VERSION_STR
>>> print("PyQt version:", PYQT_VERSION_STR)
PyQt version: 5.14.0
[mythcat@desk ~]$ pip3 install google --user
Collecting google
...
Installing collected packages: google
Successfully installed google-2.0.3
This is a simple example for search on web with this words: protv news 2019.Help on function search in module googlesearch:
search(query, tld='com', lang='en', tbs='0', safe='off', num=10, start=0, stop=None,
domains=None, pause=2.0, tpe='', country='', extra_params=None, user_agent=None)
Search the given query string using Google.
:param str query: Query string. Must NOT be url-encoded.
:param str tld: Top level domain.
:param str lang: Language.
:param str tbs: Time limits (i.e "qdr:h" => last hour,
"qdr:d" => last 24 hours, "qdr:m" => last month).
:param str safe: Safe search.
:param int num: Number of results per page.
:param int start: First result to retrieve.
:param int stop: Last result to retrieve.
Use None to keep searching forever.
:param list domains: A list of web domains to constrain
the search.
:param float pause: Lapse to wait between HTTP requests.
A lapse too long will make the search slow, but a lapse too short may
cause Google to block your IP. Your mileage may vary!
:param str tpe: Search type (images, videos, news, shopping, books, apps)
Use the following values {videos: 'vid', images: 'isch',
news: 'nws', shopping: 'shop', books: 'bks', applications: 'app'}
:param str country: Country or region to focus the search on. Similar to
changing the TLD, but does not yield exactly the same results.
Only Google knows why...
:param dict extra_params: A dictionary of extra HTTP GET
parameters, which must be URL encoded. For example if you don't want
Google to filter similar results you can set the extra_params to
{'filter': '0'} which will append '&filter=0' to every query.
:param str user_agent: User agent for the HTTP requests.
Use None for the default.
:rtype: generator of str
:return: Generator (iterator) that yields found URLs.
If the stop parameter is None the iterator will loop forever.
This is the script:[mythcat@desk ~]$ python3
Python 3.7.5 (default, Dec 15 2019, 17:54:26)
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from googlesearch import search
>>> query = "protv news 2019"
>>> my_results_list = []
>>> for url in search(query,
... tld = 'com',
... lang = 'en',
... num = 10,
... start = 0,
... stop = None,
... pause = 2.0,):
... my_results_list.append(url)
... print(url)
...
https://stirileprotv.ro/protvnews/
https://stirileprotv.ro/
https://stirileprotv.ro/superbun/protv-news.html
https://www.facebook.com/ProTvNews/
https://www.youtube.com/playlist?list=PLCJaU-QvLGR_FSZw6yeqBJHDe9LgFDRdy
https://www.youtube.com/watch?v=HaiQtDlaNic
https://www.youtube.com/watch?v=hxMEgAANSl4
https://www.youtube.com/channel/UCbbDChpDluLkdnH8QMwN6qA
https://www.youtube.com/watch?v=5zuN9uWFcTE
https://protvplus.ro/tv-live/1-pro-tv
https://en.wikipedia.org/wiki/Pro_TV
https://pro-tv.com/news/page/2/
https://m.youtube.cat/channel/UCbbDChpDluLkdnH8QMwN6qA
...
@csrf_protect
However csrf_protect will check only POST requests.{% csrf_token %}
I can use the token with my code if I want to send it to the website.from django.middleware.csrf import get_token
Then this can be used in view.py with a hidden form field with the name csrfmiddlewaretoken present in all outgoing POST forms.
def my_csrf_form(request):
response = """ ... type = "hidden" name = "csrfmiddlewaretoken" value = "__token__" ... """
This can be used with:token = get_token(request)
response = response.replace('__token__', html.escape(token))
response += dumpdata('POST', request.POST)
return HttpResponse(response)
This will get a token for the current request and fill into value = "__token__".
[mythcat@desk projects]$ source django/env/bin/activate
(env) [mythcat@desk projects]$ ls
cache django kaggle logs OSMnx pygal_ex SantaClaus.py
(env) [mythcat@desk projects]$ cd django/
(env) [mythcat@desk django]$ ls
env mysite venv
(env) [mythcat@desk django]$ cd mysite/
I change the chart.html file with this before javascript script:... {% csrf_token %} ...
You can use it in javascript - jQuery like this, if you want:var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
The CSRF protection on Django on my form can bu used in view.py:...
# use csrf_protect
from django.views.decorators.csrf import csrf_protect
from django.utils.decorators import method_decorator
...
# define view for chart
class Test001ChartView(TemplateView):
csrf_protected_method = method_decorator(csrf_protect)
I test it and works well.[mythcat@desk ~]$ cd projects/
[mythcat@desk projects]$ cd django/
...
[mythcat@desk projects]$ source django/env/bin/activate
(env) [mythcat@desk projects]$
(env) [mythcat@desk projects]$ pip3 install django-admin-shell --user
Collecting django-admin-shell
...
Installing collected packages: django-admin-shell
Successfully installed django-admin-shell-0.1
First, I test my project to see if this working.(env) [mythcat@desk projects]$ cd django/
(env) [mythcat@desk django]$ ls
env mysite venv
(env) [mythcat@desk django]$ cd mysite/
(env) [mythcat@desk mysite]$ ls
db.sqlite3 manage.py mysite test001
(env) [mythcat@desk mysite]$ python3 manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
December 14, 2019 - 18:23:47
Django version 3.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
You need to add this package into the settings.py file:INSTALLED_APPS = [
...
'django_admin_shell',
...
]
I add this package into my url.py file:...
from django.conf.urls import include, url
...
urlpatterns = [
...
# admin shell
url(r'^admin/shell/', include('django_admin_shell.urls')),
]
After that, you can start the project and see if this working: http://127.0.0.1:8000/admin/shell/[mythcat@desk ~]$ pip3 install Pygal --user
Collecting Pygal
...
Installing collected packages: Pygal
Successfully installed Pygal-2.4.0
Let's test this python package with this script:import pygal
import pandas as pd
import numpy as np
URL = 'https://data.giss.nasa.gov/gistemp/graphs/graph_data/
Global_Mean_Estimates_based_on_Land_and_Ocean_Data/graph.txt'
df = pd.read_fwf(
URL,
skiprows=(0,1,2,4),
index_col=0,
)
print(df.head)
year_data = df['No_Smoothing']
print(year_data.head)
one_chart = pygal.Bar()
one_chart.title = "Land-Ocean Temperature Index (C)"
one_chart.add("",year_data)
one_chart.render_in_browser()
The result is this output:[mythcat@desk projects]$ pip3 install osmnx --user
Installation depends by rtree python packages:[root@desk projects]# dnf install python3-rtree.noarch
...
Installed:
python3-rtree-0.9.1-1.fc31.noarch
spatialindex-1.9.3-1.fc31.x86_64
Complete!
Now you can install with pip3 tool if you use the python3.[mythcat@desk projects]$ pip3 install osmnx --user
Collecting osmnx
...
Installing collected packages: pyparsing, kiwisolver, cycler, matplotlib, descartes, networkx, Shapely,
pyproj, click, click-plugins, cligj, attrs, munch, fiona, geopandas, osmnx
Successfully installed Shapely-1.6.4.post2 attrs-19.3.0 click-7.0 click-plugins-1.1.1 cligj-0.5.0
cycler-0.10.0 descartes-1.1.0 fiona-1.8.13 geopandas-0.6.2 kiwisolver-1.1.0 matplotlib-3.1.2
munch-2.5.0 networkx-2.4 osmnx-0.11 pyparsing-2.4.5 pyproj-2.4.2.post1
Let's test the default example:[mythcat@desk projects]$ python3
Python 3.7.5 (default, Oct 17 2019, 12:16:48)
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import osmnx as ox
>>> ox.config(log_file=True, log_console=True, use_cache=True)
Configured osmnx
>>> my_loc = ox.graph_from_address('Fălticeni, Suceava, 725200, Romania', network_type= 'all',
retain_all =True)
Geocoded "Fa?lticeni, Suceava, 725200, Romania" to (47.4597637, 26.30255)
Projected the GeoDataFrame "geometry to project" to UTM-35 in 0.01 seconds
Projected the GeoDataFrame "geometry to project" to default_crs in 0.01 seconds
Created bounding box 1000 meters in each direction from (47.4597637, 26.30255): 47.46876106367192,
47.45076632191398,26.31581675508982,26.289283302659218
Projected the GeoDataFrame "geometry to project" to UTM-35 in 0.01 seconds
Projected the GeoDataFrame "geometry to project" to default_crs in 0.01 seconds
Projected the GeoDataFrame "geometry to project" to UTM-35 in 0.01 seconds
Projected the GeoDataFrame "geometry to project" to default_crs in 0.01 seconds
Requesting network data within bounding box from API in 1 request(s)
Retrieved response from cache file "cache/eb15fb167cf173e622992dbc2b7b7c77.json" for URL
"http://overpass-api.de/api/interpreter?data=%5Bout%3Ajson%5D%5Btimeout%3A180%5D%3B%28way
%5B%22highway%22%5D%5B%22area%22%21~%22yes%22%5D%5B%22highway%22%21~%22proposed%7Cconstruction
%7Cabandoned%7Cplatform%7Craceway%22%5D%5B%22service%22%21~%22private%22%5D%5B%22access%22%21
~%22private%22%5D%2847.446267%2C26.282649%2C47.473260%2C26.322452%29%3B%3E%3B%29%3Bout%3B"
Got all network data within bounding box from API in 1 request(s) and 0.01 seconds
Creating networkx graph from downloaded OSM data...
Created graph with 2,003 nodes and 3,930 edges in 0.08 seconds
Added edge lengths to graph in 0.06 seconds
Truncated graph by bounding box in 0.05 seconds
Begin topologically simplifying the graph...
Identified 339 edge endpoints in 0.03 seconds
Constructed all paths to simplify in 0.01 seconds
Simplified graph (from 2,003 to 339 nodes and from 3,930 to 803 edges) in 0.22 seconds
Truncated graph by bounding box in 0.01 seconds
Got the counts of undirected street segments incident to each node (before
removing peripheral edges) in 0.07 seconds
graph_from_bbox() returning graph with 235 nodes and 556 edges
graph_from_point() returning graph with 235 nodes and 556 edges
graph_from_address() returning graph with 235 nodes and 556 edges
>>> my_proj = ox.project_graph(my_loc)
Created a GeoDataFrame from graph in 0.05 seconds
Projected the GeoDataFrame "unnamed_nodes" to UTM-35 in 0.03 seconds
Projected the GeoDataFrame "unnamed_edges" to UTM-35 in 0.10 seconds
Extracted projected node geometries from GeoDataFrame in 0.01 seconds
Rebuilt projected graph in 0.94 seconds
>>> fig, ax = ox.plot_graph(my_proj)
Begin plotting the graph...
Created GeoDataFrame "unnamed_UTM_edges" from graph in 0.07 seconds
Drew the graph edges in 0.04 seconds
This python module comes with many features.[mythcat@desk kaggle]$ pip3 install kaggle --upgrade --user
Collecting kaggle
...
[mythcat@desk kaggle]$ mkdir ~/.kaggle/
[mythcat@desk kaggle]$ mv kaggle.json ~/.kaggle/kaggle.json
[mythcat@desk kaggle]$ kaggle
Warning: Your Kaggle API key is readable by other users on this system! To fix this, you can
run 'chmod 600 /home/mythcat/.kaggle/kaggle.json'
usage: kaggle [-h] [-v] {competitions,c,datasets,d,kernels,k,config} ...
kaggle: error: the following arguments are required: command
[mythcat@desk kaggle]$ chmod 600 /home/mythcat/.kaggle/kaggle.json
You can use the kaggle command to get informations from kaggle platform:[mythcat@desk kaggle]$ kaggle competitions list
ref deadline category reward teamCount
userHasEntered
--------------------------------------------- ------------------- --------------- --------- ---------
--------------
digit-recognizer 2030-01-01 00:00:00 Getting Started Knowledge 2305
False
titanic 2030-01-01 00:00:00 Getting Started Knowledge 17135
False
house-prices-advanced-regression-techniques 2030-01-01 00:00:00 Getting Started Knowledge 5532
False
imagenet-object-localization-challenge 2029-12-31 07:00:00 Research Knowledge 57
False
google-quest-challenge 2020-02-10 23:59:00 Featured $25,000 410
False
tensorflow2-question-answering 2020-01-22 23:59:00 Featured $50,000 810
False
data-science-bowl-2019 2020-01-22 23:59:00 Featured $160,000 1762
False
pku-autonomous-driving
...
The commands for this platform can be seen at GitHub:kaggle competitions {list, files, download, submit, submissions, leaderboard}
kaggle datasets {list, files, download, create, version, init}
kaggle kernels {list, init, push, pull, output, status}
kaggle config {view, set, unset}
The kaggle platform use an online tool with notebooks similar with Jupyter notebook for process coding in Kernels.# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load in
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input
directory
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
# Any results you write to the current directory are saved as output.
Now, I can read the dataset shown in the right the Data with inputdata = pd.read_csv("../input/lego-database/colors.csv")
data.head()
The Commit button let you to save your work for later.Type | Naming Conventions | Examples |
---|---|---|
Variable | Using short names with CapWords. | T, AnyString, My_First_Variable |
Function | Using a lowercase word or words with underscores to improve readability. | function, my_first_function |
Class | Using CapWords and do not use underscores between words. | Student, MyFirstClass |
Method | Using lowercase words separated by underscores. | Student_method, method |
Constants | Using all capital letters with underscores separating words | TOTAL, MY_CONSTANT, MAX_FLOW |
Exceptions | Using CapWords without underscores. | IndexError, NameError |
Module | Using short lower-case letters using underscores. | module.py, my_first_module.py |
Package | Using short lowercase words and underscores are discouraged. | package, my_first_package |