· 6 years ago · Mar 31, 2019, 12:42 AM
1# models.py
2User = get_user_model()
3
4
5class Repo(models.Model):
6 user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="repos")
7 url = models.URLField(max_length=600)
8 url_api = models.URLField(max_length=600)
9 slug = AutoSlugField(populate_from=["user__username","name", "owner"], overwrite=True)
10 name = models.CharField(max_length=200)
11 owner = models.CharField(max_length=200)
12
13 def __str__(self):
14 return f"{self.name} - {self.owner}"
15
16# utils.py
17import requests, json, re
18
19
20def get_github_data(url):
21 # convert github link to
22 # github api link and transform
23 # json response in python dict
24 url = re.sub("//", "//api.", url)
25 url = re.sub("com/", "com/repos/", url)
26 if url.endswith("/"):
27 url = url[:-1]
28 res = requests.get(url)
29 obj = json.loads(res.content)
30
31 return obj
32
33# views.py
34
35
36class RepoCreateView(generic.CreateView):
37 template_name = "main/repo_add.html"
38 success_url = reverse_lazy("main:repo_add")
39 model = Repo
40 fields = ("url",)
41
42 def get_context_data(self, **kwargs):
43 kwargs["repos"] = Repo.objects.filter(user=self.request.user).order_by("name")
44 return super().get_context_data(**kwargs)
45
46 def form_valid(self, form):
47 form.instance.user = self.request.user
48 data = get_github_data(form.instance.url)
49 form.instance.name = data["name"]
50 form.instance.owner = data["owner"]["login"]
51 form.instance.url_api = data["url"]
52
53 return super().form_valid(form)
54
55# settings/dev.py
56
57from .base import *
58
59# SECURITY WARNING: keep the secret key used in production secret!
60SECRET_KEY = config('SECRET_KEY')
61
62# SECURITY WARNING: don't run with debug turned on in production!
63DEBUG = True
64
65ALLOWED_HOSTS = []
66
67# Database
68# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
69
70DATABASES = {
71 'default': {
72 'ENGINE': 'django.db.backends.postgresql',
73 'NAME': config('DB_NAME_DEV'),
74 'USER': config('DB_USER_DEV'),
75 'PASSWORD': config('DB_PASSWORD_DEV'),
76 'HOST': config('DB_HOST_DEV'),
77 }
78}
79
80# settings/base.py
81# ...
82from pathlib import Path
83from decouple import config
84
85BASE_DIR = Path(__file__).parents[2]
86# ...
87STATIC_URL = "/static/"
88STATIC_ROOT = BASE_DIR.joinpath("static")
89STATICFILES_DIRS = [BASE_DIR.joinpath("assets")]
90
91MEDIA_URL = "/media/"
92MEDIA_ROOT = BASE_DIR.joinpath("media")
93
94# AUTH
95AUTH_USER_MODEL = "users.User"
96LOGIN_REDIRECT_URL = "main:home"
97LOGIN_URL = "users:login"
98LOGOUT_REDIRECT_URL = "main:home"
99
100# EMAIL
101DEFAULT_FROM_EMAIL = "me@me.com"
102EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend"
103EMAIL_FILE_PATH = str(BASE_DIR.joinpath("sent_emails"))
104# ...