{"id":26690346,"url":"https://github.com/ersel271/360121065","last_synced_at":"2026-05-11T03:19:29.648Z","repository":{"id":158834932,"uuid":"553803686","full_name":"ersel271/360121065","owner":"ersel271","description":"A simple e-commerce website demo made with Django. It was made as a project of the BLY2005 course from Marmara University Computer Programming.","archived":false,"fork":false,"pushed_at":"2023-01-02T20:43:19.000Z","size":8085,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-11T20:38:03.784Z","etag":null,"topics":["backend","django","python"],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ersel271.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-18T19:51:35.000Z","updated_at":"2023-01-05T08:14:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"d6ebd3bb-5f7f-4332-b470-9fc1d8e11a96","html_url":"https://github.com/ersel271/360121065","commit_stats":null,"previous_names":["ersel271/360121065"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersel271%2F360121065","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersel271%2F360121065/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersel271%2F360121065/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersel271%2F360121065/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ersel271","download_url":"https://codeload.github.com/ersel271/360121065/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245680399,"owners_count":20655017,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","django","python"],"created_at":"2025-03-26T15:27:56.625Z","updated_at":"2026-05-11T03:19:29.582Z","avatar_url":"https://github.com/ersel271.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# 360121065 - E Commerce Website Demo with Django\n\nA simple e-commerce website demo made with [Django](https://github.com/django/django \"Django\"). It was made as a project of the BLY2005 course from Marmara University Computer Programming.\n\n## :star: Start\n### :star: Instructions\n1. Download repository.\n2. Extract in a folder.\n3. Open folder with Visual Studio Code.\n\n### :star: Commands\n\n```bash\npy manage.py runserver\n```\n\n### :star: Admin\n1. **Admin Page**  \u0026rarr; http://127.0.0.1:8000/admin\n2. **✉️**  \u0026rarr; user@admin.com\n3. **🔑**  \u0026rarr; admin\n\n## :star: Accounts\n\n|E-Mail Address|Password|Account Type|\n| ------------ | ------------ | ------------ |\n|user@admin.com|admin|Superuser|\n|user@test.com|test|Normaluser|\n|a@a.com|ezekielartiff|Normaluser|\n|b@b.com|123|Normaluser|\n\n## :star: Apps\n- **mytemplate**  \u0026rarr; Core.\n- **website**  \u0026rarr; Homepage, information, services etc...\n- **cart**  \u0026rarr; Cart management.\n- **account**  \u0026rarr; User management operations such as registration, login, profile, dashboard etc..\n- **payment**  \u0026rarr; Payment and order management.\n\n## :star: Packages\n- **[Pillow](https://github.com/python-pillow/Pillow \"Pillow\") (9.3.0)**  \u0026rarr; Used for image management.\n```bash\npip install Pillow\n```\n- **[Six](https://github.com/benjaminp/six \"Six\") (1.16.0)**  \u0026rarr; Used in token creation.\n```bash\npip install six\n```\n- **[Iyzipay](https://github.com/iyzico/iyzipay-python \"Iyzipay\") (1.0.37)**  \u0026rarr; Used for payment management.\n```bash\npip install iyzipay\n```\n## :star: Test Cards for Payment\n\nClick [here](https://github.com/iyzico/iyzipay-python/blob/master/README.md#mock-test-cards \"here\") for original.\n\n### :star: Normal Test Cards\nCard Number | Bank | Card Type\n----------- | ---- | ---------\n5526080000000006 | Akbank | Master Card\n4603450000000000 | Denizbank | Visa\n4729150000000005 | Denizbank Bonus | Visa\n5311570000000005 | Finansbank | Master Card\n9792030000000000 | Finansbank | Troy\n5400360000000003 | Garanti Bankası | Master Card\n374427000000003  | Garanti Bankası | American Express\n5528790000000008 | Halkbank | Master Card\n5504720000000003 | HSBC Bank | Master Card\n4543590000000006 | Türkiye İş Bankası | Visa\n4157920000000002 | Vakıfbank | Visa\n5451030000000000 | Yapı ve Kredi Bankası | Master Card\n\n### :star: Cross Border Test Cards\n\nCard Number      | Country\n-----------| -------\n5400010000000004 | Non-Turkish\n\n### :star: Error Test Cards\n\nCard Number| Description\n-----------| -----------\n5406670000000009  | Success but Cannot be Cancelled, Refund or Post Auth.\n4111111111111129  | Not Sufficient Funds.\n4129111111111111  | Do Not Honour.\n4128111111111112  | Invalid Transaction.\n4127111111111113  | Lost Card.\n4126111111111114  | Stolen Card.\n4125111111111115  | Expired Card.\n4124111111111116  | Invalid CVC2.\n4123111111111117  | Not Permitted to Card Holder.\n4122111111111118  | Not Permitted to Terminal.\n4121111111111119  | Fraud Suspect\n4120111111111110  | Pickup Card.\n4130111111111118  | General Error.\n4131111111111117  | Success but \"mdStatus\" is 0.\n4141111111111115  | Success but \"mdStatus\" is 4.\n4151111111111112  | 3D Secure Initialize Failed.\n\n## :star: Database\n### :star: Website App Models\n\n```python\nclass Category(models.Model):\n    name = models.CharField(max_length = 100, db_index = True)\n    slug = models.SlugField(max_length = 105, unique = True)\n\n    class Meta:\n        verbose_name_plural = 'Categories'\n\n    def get_absolute_url(self):\n        return reverse('website:categoryFilter', args = [self.slug])\n\n    def __str__(self):\n        return self.name\n    \nclass Service(models.Model):\n    category =  models.ForeignKey(Category, on_delete=models.CASCADE)\n    name = models.CharField(max_length = 100)\n    description = models.TextField(blank = True)\n    image = models.ImageField(upload_to = 'static/website/img/')\n    bigImage = models.ImageField(upload_to = 'static/website/img/')\n    slug = models.SlugField(max_length = 105, unique = True)\n    price = models.DecimalField(max_digits = 7, decimal_places = 2)\n    is_active = models.BooleanField(default = True)\n\n    class Meta:\n        verbose_name_plural = 'Services'\n\n    def get_absolute_url(self):\n        return reverse('website:serviceDetail', args = [self.slug])\n\n    def __str__(self):\n        return self.name\n\n    @property\n    def cName(self):\n        return self.category.name\n```\n### :star: Cart App Models\n\n```python\nclass CartItem(models.Model):\n    user = models.ForeignKey(UserBase, on_delete = models.CASCADE)\n    item =  models.ForeignKey(Service, on_delete = models.CASCADE)\n    itemQty = models.IntegerField()\n\n    class Meta:\n        verbose_name_plural = \"Cart Items\"\n\n    def __str__(self):\n        return str(self.user)\n\n    @property\n    def sCategory(self):\n        return self.item.cName\n\n    @property\n    def sDescription(self):\n        return self.item.description\n\n    @property\n    def sImageUrl(self):\n        return self.item.image.url\n\n    @property\n    def sName(self):\n        return self.item.name\n\n    @property\n    def sID(self):\n        return self.item.id\n\n    @property\n    def sPrice(self):\n        return self.item.price\n\n    @property\n    def sUrl(self):\n        return self.item.get_absolute_url\n```\n\n### :star: Account App Models\n\n```python\nclass CustomAccountManager(BaseUserManager):\n    def create_superuser(self, email, user_name, password, **other_fields):\n\n        other_fields.setdefault('is_staff', True)\n        other_fields.setdefault('is_superuser', True)\n        other_fields.setdefault('is_active', True)\n\n        if other_fields.get('is_staff') is not True:\n            raise ValueError(\n                'Superuser must be assigned to is_staff = True.')\n        if other_fields.get('is_superuser') is not True:\n            raise ValueError(\n                'Superuser must be assigned to is_superuser = True.')\n\n        return self.create_user(email, user_name, password, **other_fields)\n\n    def create_user(self, email, user_name, password, **other_fields):\n\n        if not email:\n            raise ValueError(_('You must provide an email address'))\n\n        email = self.normalize_email(email)\n        user = self.model(email = email, user_name = user_name,**other_fields)\n        user.set_password(password)\n        user.save()\n        return user\n\nclass UserBase(AbstractBaseUser, PermissionsMixin):\n    email = models.EmailField(_('email address'), unique = True)\n    user_name = models.CharField(max_length = 50, unique = True)\n    firstName = models.CharField(max_length = 50)\n    lastName = models.CharField(max_length = 50)\n    phoneNumber = models.CharField(max_length = 11, unique = True)\n    address = models.TextField(max_length = 500, blank = True)\n    is_active = models.BooleanField(default = False)\n    is_staff = models.BooleanField(default = False)\n    created = models.DateTimeField(auto_now_add = True)\n\n    objects = CustomAccountManager()\n\n    USERNAME_FIELD = 'email'\n    REQUIRED_FIELDS = ['user_name']\n\n    class Meta:\n        verbose_name = \"Accounts\"\n        verbose_name_plural = \"Accounts\"\n    \n    def __str__(self):\n        return self.user_name\n\n    def email_user(self, subject, message):\n        send_mail(\n            subject,\n            message,\n            'admin@example.com',\n            [self.email],\n            fail_silently = False,\n        )\n```\n\n### :star: Payment App Models\n\n```python\nclass Order(models.Model):\n    user = models.ForeignKey(UserBase, on_delete = models.CASCADE)\n    totalPaid = models.DecimalField(max_digits = 15, decimal_places = 2)\n    created = models.DateTimeField(auto_now_add = True)\n\n    class Meta:\n        verbose_name_plural = 'Orders'\n        ordering = ('-created',)\n\n    def __str__(self):\n        return str(self.created)\n\n    @property\n    def uID(self):\n        return self.user.id\n\nclass OrderItem(models.Model):\n    order = models.ForeignKey(Order, on_delete = models.CASCADE)\n    service = models.ForeignKey(Service, on_delete = models.CASCADE)\n    price = models.DecimalField(max_digits = 7, decimal_places = 2, default = 1)\n    qty = models.PositiveIntegerField(default = 1)\n\n    class Meta:\n        verbose_name_plural = 'Order Items'\n\n    def __str__(self):\n        return str(self.order.id)\n\n    def total(self):\n        return self.price * self.qty\n\n    @property\n    def sName(self):\n        return self.service.name\n\n    @property\n    def sPrice(self):\n        return self.service.price\n\n    @property\n    def sUrl(self):\n        return self.service.get_absolute_url\n```\n\n### :star: Database Diagram\n![Database Diagram](https://i.hizliresim.com/nf8swhq.png)\n\n## :star: Template\nClick [here](https://templatemo.com/tm-526-vanilla \"here\") for original template. **(Templatemo 526 Vanilla)**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fersel271%2F360121065","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fersel271%2F360121065","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fersel271%2F360121065/lists"}