Akinon Release Notes (05/12/2025) are now live! Click here to learn what's new.
LogoLogo
API Reference
  • Home
  • Quick Start
  • Tutorials
  • Technical Guides
  • Release Notes
  • Glossary
  • Welcome to Akinon Technical Guides
  • ACC
    • ACC CLI
    • Create Application via CLI
    • Deploy Environment Variables
    • App Store for Developers
  • Omnitron
    • Product Types
    • Product Categorization
    • Splitting a Merged Order Item
  • Commerce
    • Shipping Rules Calculator
    • Data Source Shipping Options
    • Attribute Based Shipping Options
    • Filtering Products
    • Conversation & Messages
    • Sitemap Configuration
    • Weight-Based Product Sales
    • Group Attribute Sets
    • Contract Management
    • Find in Store for Whippy Ware
    • Plugins
    • Remote Price
    • E-mail Templates
    • Loyalty Accounts
    • Search Structure
    • User Segmentation & Rules
    • Promotions
  • OMS
    • Getting Started with OMS
    • Basic Setup
    • Scenarios
    • Capacity Feature
    • Package Management
      • Packages
      • Transfer
      • States
    • Commands
      • Packages
        • Package Command Parameters
        • DeAllocate Package Reservations Command
        • Channel Based Complete Packaging without Shipment Command
        • Complete Packaging with Shipment Command
        • Complete Packaging without Shipment Command
        • Package Refuse with Denial Reason Command
        • Product Not Found & Wrong Product Command
        • Product Not Found & Wrong Product Command Advanced
        • Package Packed for Refund Command
        • Block The Package For Action Command
        • Unblock the Package For Action Command
        • Update The Package’s Invoice
        • Manual Planning Command
      • Transfer
        • Transfer Order Advanced Command
        • Product for Transfer Not Found & Wrong Product Command
        • Transfer Delivered Command
        • Transfer Dispatch Command
        • Transfer Ready for Dispatch Command
        • Transfer Out Of Stock
      • Shipment
        • Shipment Order Command
        • Package Advanced Shipment Command
        • Ship The Package Command
        • Ship The Package without Shipment Integration Command
        • Update The Package’s Shipment Status Command
        • Update Shipment Info of Package Command
    • Inventory Locations & Engine
      • Properties & Domain Relation
      • Customization
      • Inventory Engine
    • Fulfillment
      • Shipments
      • Invoice Integration
    • Webhooks
      • Webhook Examples
        • Order Webhook
        • Package Webhook
        • Shipment Webhook
        • Stock Location Webhook
        • Transfer Webhook
    • Integrating OMS with Seller Center
  • Instore
    • Getting Started
    • Cash Register Integration
    • OTP (One Time Password) Process
    • Services
      • Password Reset Services
  • Marketplace Dashboard
    • N11 Marketplace Setup Configurations
    • Trendyol Marketplace Setup Configurations
    • Walmart Marketplace Setup Configurations
    • Amazon Marketplace Setup Configurations
    • Hepsiburada Marketplace Setup Configurations
  • Project Zero
    • Django
      • Basic Setup
      • Project Structure
        • Templates & Components
        • Private Dependencies
        • Omnife Project Submodule
        • Webpack
        • ESLint Rules
        • Bundles
        • Multilanguage & Translation
        • Environmental File
        • Custom Error Pages
        • Icon Font
      • Page Types
        • Static Pages & Flatpages
        • Account Page
          • Template Rendering in Account Pages
          • Forms & Validation
        • Basket Page
          • Redux Basket State
          • Basket Page - View
        • Checkout
          • Redux Checkout State
          • View & Template Rendering
          • Masking & Validation
      • Theming & Styling
      • Widgets
      • SEO Management
      • Extending Project Zero
    • Next.js
      • Basic Setup
      • Deployment
      • Static Assets
      • Plugins
      • Widgets
      • Icons
      • Localization
      • SEO Management
      • Advanced Usage
      • Data Fetching
        • Client
          • Account
          • Address
          • Basket
          • Checkout
          • Misc
          • Product
          • User
          • Wishlist
        • Server
          • Category
          • Flat Page
          • List
          • Menu
          • Product
          • SEO
          • Special Page
          • Widget
  • App Maker
    • Setup Your Environment
    • Plugin Quickstart
    • Create Project
    • Setup Existing Project
    • Deploy Project
    • Users and Roles
    • Add Public Key
    • App Maker CLI
    • Create App on Stores
      • Creating App on Apple App Store
      • Creating App on Google Play Store
    • Mobile App Framework
      • Configuration
      • Framework
      • Project Structure
        • Structure
        • Data Containers
        • Pages
      • Dependency Integration
        • Plugins
        • Akinon Plugin Adapter
  • Akifast
    • HPP
      • Getting Started
      • Authorization
      • Payment Session Creation
        • Key Points Before Creating a Payment Session
        • Creating Payment Session
        • Redirecting to the Payment Page
        • Errors Encountered During Payment Session Creation
      • Merchant Services
        • Shipping Query URL
        • Agreement Query URL
        • Other URLs
  • B2B
    • Getting Started
    • B2B Setup
  • Adds-on
    • Invoicer
      • Introduction
      • Invoice & Pay On Delivery Service
  • Channel App Template
    • Introduction
    • Installation and Usage
    • Development Steps
      • Folder Structure
      • Starting Step
      • Encoding the Sales Channel
        • Introduction
        • Setup
        • Products
        • Product Price
        • Product Stock
        • Product Image
        • Orders
        • Product Data
      • Adding a New Command to Akinon
      • Listening for External Requests
    • Architecture
      • Introduction
      • Integration
      • Services (Flows)
        • Introduction
        • Product Service
        • Price Service
        • Stock Service
        • Image Service
        • Order Service
  • Multi Regional Settings
    • Multi Regional Settings
Powered by GitBook

© 2025 Akinon. All rights reserved.

On this page
  • Forms in Account Pages​
  • Validations​
  • PzForm Actions​

Was this helpful?

  1. Project Zero
  2. Django
  3. Page Types
  4. Account Page

Forms & Validation

Forms in Account Pages​

<pz-form class="js-change-email-form a-ce-form" service="User" action="changeEmail">
  <pz-label>
    {{ _('New email address') }}*
    <pz-input
      type="email"
      name="email"
      w-full
      v-required
      v-email>
    </pz-input>
  </pz-label>
 
  <pz-label>
    {{ _('Re-enter your new email address') }}*
    <pz-input
      type="email"
      name="email_repeat"
      w-full
      v-required
      v-email>
    </pz-input>
  </pz-label>
 
  <pz-label>
    {{ _('Your password') }}*
    <pz-input
      type="password"
      name="password"
      w-full
      v-required>
    </pz-input>
  </pz-label>
 
  <pz-button type="submit" size="lg">
    {{ _('Change Email Address') }}
  </pz-button>
</pz-form>

As you can see in the example above, forms are almost completely made via web components. Here, pz-form component is responsible for submitting the form. The service and action attribute allows you to set where you want this form to be submitted to.

Some key points in the example above are:

Every form element inside pz-form is also a web component, such as pz-input, pz-label, pz-button. This is required for proper styling of said elements as well as proper validations of them.

All inputs have a name attribute, which corresponds to the field name expected by the backend, as well as the action you set on pz-form. In other words, you can’t submit an input with a name that isn’t included in pz-form’s action. Similarly, your form won’t work if you use an incorrect name field on the inputs.

PzForm has a unique, js- prefixed class or id.

Validations​

As seen in the example, all validations are controlled via attributes on input fields directly. Before the form is submitted, PzForm component will trigger these validations.

Please refer to each input component's own documentation for more information about available validations.

PzForm Actions​

PzForm’s result actions are easily configurable via JS:


this.form.beforeAction = () => {
  if (this.email.value !== this.emailRepeat.value) {
    this.errorEl.innerHTML = gettext('Email values must be matching.');
    this.errorEl.removeAttribute('hidden');
    return false;
  }
 
  this.errorEl.innerHTML = '';
  this.errorEl.setAttribute('hidden', 'hidden');
};
 
this.form.addEventListener('action-success', () => {
  window.scrollTo({ top: 0, behavior: 'smooth' });
  $(this.form).fadeOut();
  $(this.successHtml).fadeIn();
});
 
this.form.addEventListener('action-error', (error) => {
  const errorDetail = error.detail.error;
 
  if (errorDetail.data?.non_field_errors?.[0]) {
    this.errorEl.innerHTML = errorDetail.data.non_field_errors[0];
    this.errorEl.removeAttribute('hidden');
  }
});
 

After selecting the form element (this.form in example above), you can attach a custom beforeAction function to it. As the name implies, this allows you to run certain functionality before the form is submitted. In the example above, we are checking whether the email fields are matching and submitting the form only if they are. Using return inside beforeAction will prevent the form submit event.

After submitting the form, we can run functionality depending on the result we received, via event listeners.

action-success event will fire if the form is submitted successfully. Inside this event, you can access the status code, data received and parameters you sent. In the example above, we are hiding the form and showing a success message.

action-error event will fire if the form is not submitted successfully. Inside this event, you can access the same data as action-success, with the addition of an error object. In the example above, we are controlling the error object and if it includes any non-field-errors, we are displaying them accordingly.

PreviousTemplate Rendering in Account PagesNextBasket Page

Last updated 23 days ago

Was this helpful?